Question

Mes collègues deviennent fous parce que je continue à vouloir réécrire le code qui fonctionne déjà, parce que je voudrais remplacer une certaine conception de l'héritage avec des modèles de conception. Bien que je me sens comme il aidera l'amélioration du code existant, je me sens comme je deviens un peu paranoïaque à ce sujet et essayer de les utiliser partout et même le remplacement d'un modèle de conception avec un autre. Certains de mes collègues disent que tant que le code existant fonctionne, le laisser seul.

Quand dois-je cesser de les utiliser? Où tracer la ligne entre le code qui doit être remplacé par un meilleur design et celui qui a besoin de ne pas être touché?

Était-ce utile?

La solution

Si le code fonctionne, et n'a pas besoin d'attention - ne passent pas le temps / argent mise à jour. Pas jusqu'à ce qu'il soit fiscalement nécessaire de le faire. Assurez-vous tout votre nouveau code est excellent, et effacer lentement cette question à partir de maintenant.

Autres conseils

Voici une heuristique pour vous: plus le code que vous touchez est en production sans problèmes, plus vous prenez le risque en le changeant. Étant donné que, pouvez-vous évaluer la valeur réelle de ce que vous faites? Faites-vous le code mieux? Effectuer mieux? Plus maintenable? Vous devez quantifier les avantages des changements que vous faites et les équilibrer contre le risque de refactoring. Willy-bon gré mal gré refactoring en général est une erreur. Vous devriez avoir une très bonne raison de le faire et vous devriez être en mesure de quantifier les avantages.

Imaginez que votre patron vous apporte dans son / son bureau et vous demande « pourquoi avez-vous fait ce changement quand il n'y avait pas de problème avec le code? » Aurez-vous une bonne réponse?

Par commentaire: Je fournir quelques bonnes ressources pour le coût de la qualité (COQ) et le coût de la non qualité (CNQ) dans cette SO réponse .

En règle générale, les modèles de conception Gof4 impliquent l'ajout d'un certain niveau d'indirection pour faire changer de chaque côté de celui-ci plus facile. Si les choses ne vont pas changer / ne pas besoin d'être plus flexible, alors vous n'avez pas besoin que indirection. Si elle est déjà là et le travail, pas besoin de changer. Les niveaux de redirection ne sont pas libres, mais des coûts en termes de performance et de complexité supplémentaire. Les auteurs eux-mêmes ont souligné GOFF ce si je me souviens bien.

Modification d'ajouter: OK, a dû aller chercher le livre pour trouver la citation exacte. Il est à la fin de l'introduction à la page 31, au moins dans l'édition je:

  

Les modèles de conception ne doivent pas être appliquées   sans discernement. Souvent, ils atteignent   la flexibilité et la variabilité par   introduire des niveaux supplémentaires de   indirection, et qui peut compliquer   conception et / ou le coût que vous certains   performance. Un modèle de conception devrait   être appliquée que lorsque la flexibilité   il offre est réellement nécessaire.

En touchant le code, vous créez le risque que le code de travail une fois cessera de fonctionner correctement. Une meilleure utilisation de votre temps est peut-être pour vous assurer que le code existant est couvert par des tests unitaires. Puis, quand le besoin se fait sentir de changer le code, vous pouvez factoriser à tout modèle est approprié, et veiller à ce que le code fonctionne toujours comme il a été conçu pour.

Lorsque vous refactoring alors vous pouvez regarder refactoring pour concevoir des modèles, mais il ne sert à rien de changer le code juste pour les modèles de conception, si elle travaille déjà.

Je suis d'accord avec Joel Spolsky que réécriture du code est presque toujours une mauvaise idée moins vous avez une très, très idée précise de ce qui est mal avec le code existant, ce qui permettra d'améliorer le réécrire, et quelles sont les connaissances que vous êtes susceptible de perdre en le réécrivant.

« Code Réécriture parce qu'il porte atteinte à votre sensibilité » est, au sérieux, une idée teribly mauvaise. Il est une mauvaise utilisation de votre temps, et il court le risque de casser quelque chose que vous ne comprenez pas.

Chaque ligne de code que vous réécrivez est potentiellement (et, dans mon expérience, probablement) un nouveau bug que vous présentez à la base de code. Ne jamais réécrire le code, sauf si vous avez une raison présent et impérieuse de le faire.

Si vous étiez mon collègue, je serais fou aussi va. Les modèles de conception ne sont que quelques idées générales sur la façon de s'y prendre pour résoudre les problèmes. Ils ne sont pas la parole du Seigneur a fait descendre du sommet de la montagne sur des tablettes d'argile.

Je pense qu'il est très bon que vous avez posé la question, c'est la première étape vers DPW (retrait de modèle de conception).

Il semble que vous avez les signes classiques de dépendance, est maintenant le temps de prendre du recul et d'examiner votre vie de codage, et demander des choses comme cela affecte mes collègues? Mon entreprise est la souffrance à cause de mon habitude?

Après réflexion et d'examen, peut-être vous pouvez trouver un moyen de modérer l'utilisation de votre modèle de conception, et de remplacer les modèles destructeurs avec ceux en bonne santé, que vous apporter des avantages pour vous et votre équipe de codage.

Quelques lignes utiles de remise en question pourraient être, utilisez-vous des modèles de conception juste parce que vous avez lu un nouveau hier soir, ou parce que vous pensez qu'il pourrait ajouter de la valeur réelle du projet? Avez-vous forcez un modèle de conception du code en raison de vos désirs forts, ou parce qu'une réelle utilité pour le modèle a émergé? Est-ce que le code déjà bien fonctionne et ne sera pas mis à jour à tout moment bientôt? Dans ce cas, il pourrait y avoir de meilleurs endroits pour passer votre temps.

Enfin, vous pouvez essayer de faire aller complètement laisser voir ce « modèles » naturels émergent du code que vous écrivez, plutôt que d'essayer de forcer le code à adapter à vos idées sur la façon dont il devrait être. Vous découvrirez peut-être votre propre « modèles » de cette façon.

Bonne chance, je pense que beaucoup d'entre nous ont été là d'une façon ou d'une autre, rappelez-vous que vous avez toujours votre réseau de soutien au (sens et commun) SO de tomber en arrière sur si vous avez une rechute.

Ne pas forcer une nouvelle conception - seulement factoriser le code que vous avez besoin, surtout si le code fonctionne déjà correctement. Plus vous changez, plus vous devrez tester. Et s'il ne sont pas les tests existants, cela signifie (dans un monde parfait, de toute façon) que vous devez écrire les tests.

Au lieu de cela, se concentrer sur le nettoyage du code en petits morceaux, ne faisant que ce doit être fait. Comme vous allez, écrire ou mettre à jour des tests unitaires pour les classes que vous touchez pour assurer que tout continue de fonctionner comme il se doit.

pour des projets personnels, vous assommer.

pour les emplois perfessional, arrêtez! vous gaspillez des ressources, vous pouvez exécuter des fonctionnalités demandées. Alos, êtes-vous sûr que vous traduisez l'ancien code 100% quand vous le changiez. sinon, vous créez des problèmes et peut-être de nouveaux bugs.

Ne pas trop ingénieur quand il est pas nécessaire. Nous avons pris un peu de temps pour moi d'apprendre moi-même, bien que.

Demandez-vous quand il est nécessaire pour utiliser un modèle de conception particulière. Quand ce n'est pas le cas, ne sont pas. Une bonne raison d'utiliser des modèles de conception sur un système existant est au cours de refactoring.

Joel Spolsky discuté plutôt intelligemment sur son blog .

Pour l'essentiel, le plus un morceau de code est, plus il est probable qu'il a été testé et débogué à fond; même si elle est pleine de corrections étranges et des choses que vous pensez des hacks, il est probable qu'il ya une bonne raison pour eux. Donc, éviter réécriture du code, peu importe à quel point la conception vous offense, à moins que le code est définitivement rompu.

Je vais avec la méthode « argent ». Réécriture du code existant coûte votre argent de l'employeur (votre salaire, etc.). Pouvez-vous dire honnêtement que votre rewrite coûtera votre employeur moins de laisser la façon dont il est? Dans mon expérience, la réponse est presque toujours « non ».

Je l'ai rencontré plus de quelques dont la capacité à quantifier le coût était pauvre, ne lui a donné aucune considération rationnelle ou pris en charge plus de leur désir immédiat d'extraire un chèque de paie que de livrer une bonne valeur à leur employeur. J'ai personnellement trouvé de bons employeurs viennent à vous reconnaître vous les aider et viennent à faire confiance à votre jugement au fil du temps.

La plupart des programmeurs ont un client quelque part le long de la ligne, qui paie essentiellement le salaire du programmeur.

Quand il se produit pour vous de faire un changement comme celui-ci, demandez-vous: « Si je fait le client à comprendre les enjeux, serait-il que je passe beaucoup de temps à ce sujet? ». Beaucoup plus souvent qu'autrement, la réponse est non. Pourquoi seraient-ils des soins si elle fonctionne?

je suis en désaccord avec tout le monde quand vous ne disposez pas d'un client. Refonte, critiquer, améliorer votre code est ce que vous faites mieux. Si vous ne voulez jamais rétrospection sur ce que vous avez fait, vous ne pourrez pas améliorer, vous devez vous critiquer. Même si plus tard vous voyez que c'était une mauvaise idée de redessiner, vous apprendrez pourquoi.

Très souvent, je me retrouve avec le « laisser toujours un morceau de code dans un meilleur état que ce que vous l'avez trouvé » principe.

Donc, si je charge une classe et remarque qu'il pourrait faire avec un peu d'un nettoyage de printemps avant que je mis à faire la demande de changement, je le ferai en premier. Cela a aussi un autre avantage en ce qu'elle double-up pour vous comme un moyen de lire et de comprendre le code et ses dépendances, etc.

Je trouve que faire alors la demande de changement est beaucoup plus simple parce que vous comprenez mieux le code.

Et puis à la fin de tout ce que vous avez le meilleur des deux mondes ... un client heureux et une base de code plus heureux.

Le commerce différents modèles de conception sans gain est une proposition perdante. Lors de la conception d'une utilisation de l'application ce que vous croyez être le modèle de conception et rester avec elle à moins que des raisons évidentes pour changer le modèle. Je suggère l'écoute de vos collègues de travail et de quitter cette application seule.

Je ne pense pas « Si ce n'est pas cassé, ne le répare pas » est juste. Je pense que vous devriez certainement à la recherche de code qui peut être refactorisé pour le rendre meilleur façon tangible. La chose est - assurez-vous que vous faites quelque chose qui va aider à l'avenir, et la partie où elle aide est béton .

En termes de modèle de conception - modèles de conception vous aider à rendre votre code plus robuste face à des changements - il permet à certaines parties du code pour faire varier indépendamment des autres. Pensez qu'il y ait une bonne raison de changer quelque chose - anticipez-vous les changements à venir à un morceau de code qui nécessitera de toucher beaucoup d'autres sous-systèmes?

Si vous indiquant clairement le problème que vous fixer, et vous êtes en mesure de vous convaincre vos collègues que le problème est une valeur de fixation (c.-à-bénéfice futur est évident), alors vous devriez être en mesure de faire avancer ce dossier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top