J'ai une méthode héritée relativement importante que je voudrais refactoriser. Il correspond au type de "méthode à puces" tel que spécifié dans "Working Effectively With Legacy Code" de Michael Feathers et pourrait donc être divisé en plusieurs méthodes séquentielles de manière plutôt directe. Mais chacune de ses étapes séquentielles génère un message de journal et la formation de ce message nécessite beaucoup plus de données que pour l'étape elle-même. Donc quand j'essaie d'extraire la méthode, je me retrouve avec une méthode ayant, disons, 6 paramètres. Si j'avais supprimé ces instructions de log, j'aurais une méthode avec seulement 1 paramètre. Donc je ne peux vraiment pas refactoriser quoi que ce soit. Et je ne suis pas autorisé à laisser tomber les déclarations de journaux.Les instructions de journal empêchent le refactoring: comment y remédier?
Une partie de la méthode ressemble à ce que:
// much of code before
Device device = getDevice(deviceID);
boolean isFirstRegistration = false;
if (device == null) {
/*logger.trace(
"DeviceId", deviceID,
"ADM", adminCode,
"Phone", clientData.getPhone()
);
logger.info("First registration of the device. Device ID - " + deviceID);*/
isFirstRegistration = true;
} else {
/*logger.trace(
"DeviceId", deviceID,
"ADM", adminCode,
"Phone", clientData.getPhone()
);
logger.info("Device ID - " + deviceID
+ " has been previously registered by adminCode: "
+ device.getAdminCode());*/
}
// much of code after
Comme vous le voyez, a commenté des déclarations de l'exploitation forestière. Dans ce cas, je peux extraire la méthode boolean isFirstRegistration(String deviceId)
. Mais quand ils ne sont pas commentés, la signature gonfle jusqu'à boolean isFirstRegistration(String deviceId, String adminCode, ClientData clientData)
. Et ce n'est pas le cas le plus extrême, juste un du premier coup d'oeil. Avez-vous des idées comment devrais-je refactoriser une telle méthode?
Pouvons-nous le voir? Vous pouvez faire en sorte que la méthode log helper prenne les données supplémentaires et renvoie une seule chaîne/objet que vous transmettez ensuite à votre méthode pour la consignation. Ou mettez tous les éléments nécessaires à la connexion dans un seul tableau ou un hachage et transmettez-le. – CaffGeek
Qu'essayez-vous d'accomplir grâce à votre refactoring? –
Je vais essayer d'écrire un extrait similaire à la partie de cette méthode. – Rorick