Pour une solution un peu plus complète, vous pouvez consulter l'outil Introduire l'objet Null Refactoring . La mécanique de base de ce remaniement est qu'au lieu de vérifier que les éléments suivants sont présents nil
dans le client vous devez plutôt vous assurer que le code fournisseur ne produit jamais un nil
en premier lieu, en introduisant un contexte spécifique objet nul et de le renvoyer.
Donc, renvoyer une chaîne vide, un tableau vide, un hachage vide ou un client vide spécial ou un utilisateur vide ou quelque chose d'autre au lieu de juste nil
et vous n'aurez jamais besoin de vérifier si nil
en premier lieu.
Donc, dans votre cas, vous auriez quelque chose comme
class NullUser < User
def name
return ''
end
end
Cependant, en Ruby, il existe en fait une autre manière, assez élégante, de mettre en œuvre le "Introduce Null Object Refactoring" : vous n'avez pas besoin de introduire un objet nul, car nil
es déjà un objet ! Donc, vous pourriez faire du singe-patching nil
pour qu'il se comporte comme un NullUser - cependant, tous les avertissements et pièges habituels concernant monkey-Parcheando s'appliquent encore plus fortement dans ce cas, puisque faire de nil
avaler silencieusement NoMethodError
ou quelque chose comme ça peut totalement perturber votre expérience de débogage et rendre realmente difficile de retrouver les cas où il y a un nil
qui ne devrait pas être là (par opposition à une nil
qui sert d'objet nul).