Cette pratique est à bannir car à chaque évolution, le développeur est obligé de modifier l'ensemble des copies du code.
La bonne démarche consiste à mettre à disposition le code dupliqué à un seul endroit, et de l'appeler autant de fois que nécessaire.
Ceci arrive souvent avec l'implémentation de la chaîne de responsabilité
La chaîne de responsabilité (ou chain of responsability) est un design pattern.
Vous pouvez trouver une implémentation de ce dernier sur le site dofactory.com.
Ce dernier permet donc de consulter un ensemble d'objets pouvant répondre à une même requête, tout en construisant la chaine d'objets consultés dynamiquement.
Chaque objet consulté implémente donc la même interface que la classe Handler. Ces objets sont souvent sollicités de même façon
- Il teste la requête pour savoir si elle le concerne.
- Si oui, il exécute sont traitement.
- Si non, il transmette au suivant.
Afin d'éviter le copier-coller, sachant que chaque informaticien devrait être payé à la ligne de code qu'il n'écrit pas, j'utilise une classe intermédiaire évitant cette duplication.
En reprenant l'exemple de chez dofactory cela donne pour la classe intermédiaire :
Et par conséquent les handlers concrets donnent, par exemple pour ConcreteHandler1 :
pour les autres, il suffit de changer le ConcernTest
Évidemment dans l'exemple ici, l'Action est identique, mais dans une utilisation réelle cette méthode serait spécifique.
Nous avons donc réussi notre objectif, à savoir éviter de dupliquer la méthode HandleRequest.
Intéressant, je ne connaissais pas. Si j'ai la possibilité (pas forcément toujours possible de changer une architecture existante ayant de nombreuses duplications de codes), j'utiliserais ce mécanisme car le copier-coller de code c'est mal!
RépondreSupprimerAttention cet article concerne une utilisation non optimal du design pattern Chaîne de responsabilité. Il explique donc comment éviter la duplication du code dans son utilisation et non de façon générale.
RépondreSupprimer