Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Remplacer un paramètre par des méthodes explicites.

Problème

Une méthode est divisée en parties, chacune étant exécutée en fonction de la valeur d'un paramètre.

Solution

Extrayez les différentes parties de la méthode dans leurs propres méthodes et appelez-les à la place de la méthode d'origine.

##Exemple

Avant
void setValue(String name, int value) {
  if (name.equals("height")) {
    height = value;
    return;
  }
  if (name.equals("width")) {
    width = value;
    return;
  }
  Assert.shouldNeverReachHere();
}
Après
void setHeight(int arg) {
  height = arg;
}
void setWidth(int arg) {
  width = arg;
}

##Pourquoi refactoriser

Une méthode contenant des variantes dépendant d'un paramètre est devenue massive. Du code non trivial s'exécute dans chaque branche et de nouvelles variantes sont ajoutées très rarement.

##Avantages

  • Améliore la lisibilité du code. Il est bien plus facile de comprendre le but de startEngine() que celui de setValue("engineEnabled", true).

##Comment refactoriser

  1. Pour chaque variante de la méthode, créez une méthode distincte. Exécutez ces méthodes en fonction de la valeur d'un paramètre dans la méthode principale.

  2. Trouvez tous les endroits où la méthode d'origine est appelée. À ces endroits, placez un appel à l'une des nouvelles variantes dépendant du paramètre.

  3. Lorsqu'il ne reste plus aucun appel à la méthode d'origine, supprimez-la.