Introduire un objet Null.
Comme certaines méthodes renvoient null au lieu d’objets réels, votre code comporte de nombreuses vérifications de null.
Au lieu de null, renvoyez un objet Null qui présente le comportement par défaut.
##Example
if (customer == null) {
plan = BillingPlan.basic();
}
else {
plan = customer.getPlan();
}class NullCustomer extends Customer {
boolean isNull() {
return true;
}
Plan getPlan() {
return new NullPlan();
}
// Autres fonctionnalités NULL.
}
// Remplacer les valeurs null par l'objet Null.
customer = (order.customer != null) ?
order.customer : new NullCustomer();
// Utiliser l'objet Null comme s'il s'agissait d'une sous-classe normale.
plan = customer.getPlan();##Why Refactor
Des dizaines de vérifications de null rendent votre code plus long et plus laid.
##How to Refactor
-
À partir de la classe concernée, créez une sous-classe qui jouera le rôle d’objet Null.
-
Dans les deux classes, créez la méthode
isNull(), qui renverratruepour un objet Null etfalsepour une classe réelle. -
Repérez tous les endroits où le code peut renvoyer
nullau lieu d’un objet réel. Modifiez le code pour qu’il renvoie un objet Null. -
Repérez tous les endroits où les variables de la classe réelle sont comparées à
null. Remplacez ces vérifications par un appel àisNull(). -
- Si des méthodes de la classe d’origine sont exécutées dans ces conditions lorsqu’une valeur n’est pas égale à
null, redéfinissez ces méthodes dans la classe Null et insérez-y le code de la partieelsede la condition. Vous pouvez alors supprimer toute la condition, et le comportement différent sera mis en œuvre via le polymorphisme. - Si les choses ne sont pas si simples et que les méthodes ne peuvent pas être redéfinies, voyez si vous pouvez simplement extraire les instructions qui devaient être exécutées dans le cas d’une valeur
nullvers de nouvelles méthodes de l’objet Null. Appelez ces méthodes à la place de l’ancien code danselse, comme opérations par défaut.
- Si des méthodes de la classe d’origine sont exécutées dans ces conditions lorsqu’une valeur n’est pas égale à