ConstructiCat Logo
CodeBust.
Browse section ▾

Remplacer un paramètre par un appel de méthode.

Problem

Appeler une méthode de requête et passer son résultat comme paramètre d'une autre méthode, alors que cette méthode pourrait appeler directement la requête.

Solution

Au lieu de passer la valeur via un paramètre, essayez de placer un appel de requête à l'intérieur du corps de la méthode.

##Example

Before
int basePrice = quantity * itemPrice;
double seasonDiscount = this.getSeasonalDiscount();
double fees = this.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
After
int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);

##Why Refactor

Une longue liste de paramètres est difficile à comprendre. De plus, les appels à de telles méthodes ressemblent souvent à une série de cascades, avec des calculs de valeurs sinueux et grisants, difficiles à suivre mais qui doivent malgré tout être passés à la méthode. Donc, si la valeur d'un paramètre peut être calculée à l'aide d'une méthode, faites-le à l'intérieur de la méthode elle-même et débarrassez-vous du paramètre.

##Benefits

  • Nous nous débarrassons des paramètres inutiles et simplifions les appels de méthode. De tels paramètres sont souvent créés non pas pour le projet tel qu'il est actuellement, mais en prévision de besoins futurs qui pourraient ne jamais se présenter.

##How to Refactor

  1. Assurez-vous que le code qui récupère la valeur n'utilise pas de paramètres de la méthode actuelle, car ils ne seront pas disponibles depuis l'intérieur d'une autre méthode. Si c'est le cas, le déplacement du code n'est pas possible.

  2. Si le code concerné est plus compliqué qu'un simple appel de méthode ou de fonction, utilisez Extraire une méthode pour isoler ce code dans une nouvelle méthode et rendre l'appel simple.

  3. Dans le code de la méthode principale, remplacez toutes les références au paramètre remplacé par des appels à la méthode qui récupère la valeur.

  4. Utilisez Supprimer un paramètre pour éliminer le paramètre désormais inutilisé.