ConstructiCat Logo
CodeBust.
Browse section ▾

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

Problem

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.

##Example

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

##Why Refactor

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.

##Benefits

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

##How to Refactor

  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.