54 votes

Combien de code dupliqué avez-vous tolérer?

Dans une récente revue de code, j'ai repéré quelques lignes dupliquées logique dans une classe (au moins 15 lignes). Quand j'ai suggéré que l'auteur de refactoriser le code, il a fait valoir que le code est plus simple à comprendre de cette façon. Après avoir lu le code, encore une fois, je suis d'accord à l'extraction de la copie de la logique nuirait à la lisibilité un peu.

Je sais SEC d'une recommandation, pas une règle absolue. Mais en général, êtes-vous prêt à faire mal lisibilité dans le nom de la SEC?

74voto

Nick Dandoulakis Points 26809

Refactoring: l'Amélioration de la Conception de Code Existant

La Règle de Trois

La première fois que vous faites quelque chose, vous juste de le faire. La deuxième fois, vous ne
quelque chose de similaire, vous grincer des dents à la duplication, mais vous ne le doublon
chose de toute façon. La troisième fois que vous faites quelque chose de similaire, vous refactoriser.

Trois grèves et vous refactoriser.


Codeurs au Travail

Seibel: Ainsi pour chacun de ces XII appels que vous êtes en train de rédiger un la mise en œuvre.
Avez-vous jamais trouvé que vous étiez en accumulant beaucoup de bits de très semblable code?

Zawinski: Oh, oui, certainement. Généralement par la deuxième ou la troisième fois vous avez coupé et collé
ce morceau de code, c'est comme, bien, les temps d'arrêt couper et coller et le mettre dans un sous-routine.

43voto

Reed Copsey Points 315315

Personnellement, je préfère garder le code compréhensible, d'abord et avant tout.

SEC est à propos de l'assouplissement de la maintenance dans le code. Rendre votre code moins compréhensible afin de supprimer du code à répétition fait mal à la maintenabilité de plus, dans de nombreux cas, que d'avoir quelques répétées de lignes de code.

Cela étant dit, je suis d'accord que la sécheresse est un bon objectif à suivre, lors de la pratique.

42voto

Vinko Vrsalovic Points 116138

Je tolère aucun. J'ai peut-être certains en raison de contraintes de temps ou autres joyeusetés. Mais je n'ai toujours pas trouvé un cas où le code dupliqué est vraiment justifiée.

Dire que ça va mal lisibilité seulement suggère que vous êtes mal à choisir les noms :-)

12voto

Ira Baxter Points 48153

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.

9voto

Unsliced Points 5800

Dès que vous répéter tout ce que vous êtes en train de créer de multiples lieux de faire des modifications si vous trouvez que vous avez fait une erreur, besoin de le proroger, de modifier, de supprimer ou de tout autre des dizaines d'autres raisons que vous pourriez trouver à l'encontre de cette force de changement.

Dans la plupart des langues, l'extraction d'un bloc à un bien nommé méthode peut rarement faire mal à votre lisibilité.

Il est de votre code, vos normes, mais ma réponse à votre "combien?" est aucun ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X