Si le code en question a clairement des affaires ou de la technologie de support P, vous devez généralement à refactoriser. Sinon, vous avez le problème classique avec cloné code: finalement, vous découvrirez un besoin de modifier le code de l'appui P, et vous ne trouverez pas tous les clones qui l'implémentent.
Certaines personnes suggèrent de 3 ou plus de copies est le seuil de refactoring. Je crois que si vous avez les deux, vous devriez le faire, trouver un autre clone(s) [ou même en sachant qu'ils peuvent exister dans un grand système est difficile, si vous avez deux ou trois ou plus.
Maintenant, cette réponse est fournie dans le contexte de ne pas avoir tous les outils pour trouver les clones. Si vous pouvez trouver de manière fiable des clones, puis le motif original de refactoriser (en évitant les erreurs de maintenance) est moins persausive (l'utilité d'avoir un nom abstrait est toujours vrai). Ce que vous voulez vraiment est un moyen de trouver et de suivre les clones; abstraction est une façon de s'assurer que vous pouvez "trouver" (par la prise de constatation triviale).
Un outil qui permet de trouver des clones de manière fiable peut au moins vous empêcher de faire échec à la mise à jour-clone des erreurs de maintenance. Un tel outil (je suis l'auteur) est le CloneDR. CloneDR trouve des clones à l'aide de la langue ciblée structure d'orientation, et se trouve ainsi clones indépendamment des espaces de mise en page, les changements dans les commentaires, renommé les variables, etc. (Il est mis en œuvre pour un grand nombre de langues, y compris en C, C++, Java, C#, COBOL, PHP). CloneDR trouverez des clones à l'échelle de grands systèmes, sans la moindre orientation. Détecté clones sont affichés, ainsi que le antiunifier, qui est essentiellement l'abstraction que vous avez écrit à la place. Versions de celui-ci (pour COBOL) intègrent désormais avec Eclipse, et vous montrer que vous êtes l'édition à l'intérieur d'un clone dans un tampon, ainsi que là où les autres sont des clones, de sorte que vous pouvez vérifier/modifier les autres pendant que vous êtes là. (Une chose que vous pouvez faire est de refactoriser :).
J'ai l'habitude de penser que le clonage était juste carrément mauvais, mais les gens le font parce qu'ils ne savent pas comment le clone varient par rapport à l'original et donc la finale de l'abstraction n'est pas clair au moment où le clonage de loi est en cours. Maintenant, je crois que le clonage est bon, si vous pouvez suivre les clones et que vous essayez de refactoriser après l'abstraction devient clair.