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.
##Exemple
if (customer == null) {
plan = BillingPlan.basic();
}
else {
plan = customer.getPlan();
}class NullCustomer extends Customer {
boolean isNull() {
return true;
}
Plan getPlan() {
return BillingPlan.basic();
}
// Autres comportements de l'objet 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();##Pourquoi refactoriser
Des dizaines de vérifications de null rendent votre code plus long et plus laid.
##Comment refactoriser
-
À 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(). -
Simplifiez ensuite les conditions elles-mêmes :
- 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 à