Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Introduire un objet paramètre.

Problème

Vos méthodes contiennent un groupe de paramètres qui se répète.

Solution

Remplacez ces paramètres par un objet.

##Exemple

Avant
double amountInvoicedIn(Date start, Date end) {
  // ...
}
double amountReceivedIn(Date start, Date end) {
  // ...
}
Après
double amountInvoicedIn(DateRange range) {
  // ...
}
double amountReceivedIn(DateRange range) {
  // ...
}

class DateRange {
  private Date start;
  private Date end;

  DateRange(Date start, Date end) {
    this.start = start;
    this.end = end;
  }
}

##Pourquoi refactoriser

On rencontre souvent des groupes de paramètres identiques dans plusieurs méthodes. Cela entraîne une duplication de code, à la fois des paramètres eux-mêmes et des opérations qui leur sont associées. En regroupant les paramètres dans une seule classe, vous pouvez aussi y déplacer les méthodes qui traitent ces données, libérant ainsi les autres méthodes de ce code.

##Avantages

  • Un code plus lisible. Au lieu d'un fouillis de paramètres, vous voyez un objet unique doté d'un nom compréhensible.

  • Des groupes de paramètres identiques disséminés çà et là constituent une forme de duplication de code à part entière : même si aucun code identique n'est appelé, on retrouve constamment des groupes identiques de paramètres et d'arguments.

##Comment refactoriser

  1. Créez une nouvelle classe qui représentera votre groupe de paramètres. Rendez cette classe immuable.

  2. Dans la méthode que vous voulez remanier, utilisez Ajouter un paramètre, par lequel votre objet paramètre sera passé. Dans tous les appels de la méthode, passez à ce paramètre l'objet créé à partir des anciens paramètres de la méthode.

  3. Commencez maintenant à supprimer un à un les anciens paramètres de la méthode, en les remplaçant dans le code par les champs de l'objet paramètre. Testez le programme après chaque remplacement de paramètre.

  4. Une fois terminé, demandez-vous s'il est pertinent de déplacer une partie de la méthode (voire parfois la méthode entière) dans la classe de l'objet paramètre. Si c'est le cas, utilisez Déplacer la méthode ou Extraire la méthode.