Introduire une méthode étrangère.
Une classe utilitaire ne contient pas la méthode dont vous avez besoin et vous ne pouvez pas l'y ajouter.
Ajoutez la méthode à une classe cliente et passez-lui un objet de la classe utilitaire en argument.
##Example
class Report {
// ...
void sendReport() {
Date nextDay = new Date(previousEnd.getYear(),
previousEnd.getMonth(), previousEnd.getDate() + 1);
// ...
}
}class Report {
// ...
void sendReport() {
Date newStart = nextDay(previousEnd);
// ...
}
private static Date nextDay(Date arg) {
return new Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1);
}
}##Why Refactor
Vous avez du code qui utilise les données et les méthodes d'une certaine classe. Vous réalisez que ce code aurait meilleure allure et fonctionnerait bien mieux à l'intérieur d'une nouvelle méthode de la classe. Mais vous ne pouvez pas ajouter la méthode à la classe parce que, par exemple, la classe se trouve dans une bibliothèque tierce.
Ce refactoring offre un grand bénéfice lorsque le code que vous voulez déplacer dans la méthode est répété à plusieurs endroits différents de votre programme.
Puisque vous passez un objet de la classe utilitaire aux paramètres de la nouvelle méthode, vous avez accès à tous ses champs. À l'intérieur de la méthode, vous pouvez faire pratiquement tout ce que vous voulez, comme si la méthode faisait partie de la classe utilitaire.
##Benefits
- Supprime la duplication de code. Si votre code est répété à plusieurs endroits, vous pouvez remplacer ces fragments de code par un appel de méthode. Cela vaut mieux que la duplication, même en tenant compte du fait que la méthode étrangère se trouve à un emplacement non optimal.
##How to Refactor
-
Créez une nouvelle méthode dans la classe cliente.
-
Dans cette méthode, créez un paramètre auquel l'objet de la classe utilitaire sera passé. Si cet objet peut être obtenu depuis la classe cliente, vous n'avez pas besoin de créer un tel paramètre.
-
Extrayez les fragments de code concernés vers cette méthode et remplacez-les par des appels de méthode.
-
Veillez à laisser l'étiquette Méthode étrangère dans les commentaires de la méthode, accompagnée du conseil de placer cette méthode dans une classe utilitaire si cela devient possible plus tard. Cela permettra à ceux qui maintiendront le logiciel à l'avenir de comprendre plus facilement pourquoi cette méthode se trouve dans cette classe en particulier.