Dans un langage OO (par exemple, mais sans s'y limiter, Java) comment corrigez-vous le code en double en fonction de la portée de son occurrence? Je commencerais par (par exemple)
- dans la même classe (portée), effectuez le refactoring de la méthode d'extraction (correction)
- dans les classes de la même hiérarchie (portée), effectuez la méthode d'extraction et tirez vers le haut (correction)
- ...
object-oriented
dry
Peter Kofler
la source
la source
Réponses:
Récemment, j'ai trouvé une bonne réponse à ma question dans "Clean Code" d'oncle Bob, que je veux partager. Il différencie trois types de duplication
Les morceaux de code identique doivent être remplacés par une seule méthode. Le correctif consisterait donc à extraire la méthode et à déléguer à un comportement courant.
SthUtil
ouSthLib
).cas de
switch/case
etif/else
qui testent toujours pour le même ensemble de conditions .Modules qui implémentent des algorithmes similaires . Ce sont les plus difficiles à trouver, car aucun détecteur de clone ne peut les trouver.
Également un point valable mentionné par Oded, lorsqu'il s'agit de différentes versions de bibliothèques
En fin de compte, la meilleure phrase pour répondre à ma question est par stimms:
la source
En général - consolidez le code en double en un seul endroit et assurez-vous que le site de duplication d'origine appelle l'endroit consolidé.
Dans vos exemples, dans une classe, ce serait la méthode extraite et dans un ensemble de classes, la méthode extraite dans la classe de base.
Dans le code copier-coller, cela consisterait à supprimer les doublons et à garantir que tous les utilisateurs utilisent désormais la copie unique (quel que soit le niveau).
Lorsque vous traitez avec différentes versions de bibliothèques, consolidez sur une seule version (si possible).
la source
Je suppose que c'est une question ouverte mais cela dépend aussi de l'état du code. Je veux dire que vous pouvez tolérer un peu le code en double en fonction du contexte. La règle de trois est bonne à cet égard.
Règle de trois La première fois que vous faites quelque chose, vous le faites simplement. La deuxième fois que vous faites quelque chose de similaire, vous grimacez devant la duplication, mais vous faites quand même la chose en double. La troisième fois que vous faites quelque chose de similaire, vous refactorisez.
Bien que cela soit à peu près discutable, ce post considère également les cas où vous toléreriez un code en double.
la source