Est-ce que lécriture de code redondant est une mauvaise pratique?

Meilleure réponse

Oui, vous allez écrire les mêmes types et recherches et fonctions de gestion des chaînes des milliers de fois, chacune juste un mineur Variante de la dernière fois.

Cest tellement vrai quune philosophie de sauvegarde de la raison, niant quelle est apparue dans le milieu universitaire, appelée « Ne vous répétez pas », prétend quil existe un moyen de ne pas écrire le même code et plus.

Ce mantra stupide doit vraiment être éliminé des gens.

Un design intelligent signifie ne pas avoir à recommencer à zéro à chaque fois, et le codage intelligent signifie savoir quand écrire quelque chose nouveau et quand réutiliser le code.

La réutilisation du code comme mesure de gain de temps et de débogage a ses mérites, lorsquelle est disponible. Cela a évolué vers des outils utiles tels que les génériques et les modèles et le concept dhéritage et les API universelles de sorte que le tri et la recherche deviennent génériques au lieu davoir besoin dune nouvelle fonction de recherche à écrire pour chaque type de tableau ou de liste.

La copie de texte de code est considérée comme la pire erreur car elle copie les bogues et les ballonnements du code, et est principalement ce qui est considéré comme redondant.

Cest là que lhéritage brille en tant que stratégie de réduction de code. Les sous-classes nont pas besoin dêtre des réécritures coûteuses de leurs classes de base si la plupart des fonctionnalités communes à toutes les sous-classes sont placées dans la classe de base. Plusieurs fois, la sous-classe peut appeler la fonction de classe de base, puis effectuer elle-même quelques modifications, plutôt que de réimplémenter la fonction entière. Cest de cela dont ils parlent.

Mais le « Dont Repeat Yourself » a acquis le statut de culte dans des forums comme celui-ci comme une sorte de moyen idéal de coder et de concevoir, et ce nest tout simplement pas vrai ou pratique ou faisant partie dun corps de code majeur du monde réel.

La sur-conception est destinée aux développeurs de langage, aux théoriciens et aux créateurs de framework. Les codeurs pratiques écrivent simplement du code qui fonctionne, et si votre programme a deux classes qui implémentent toutes les deux la recherche binaire, eh bien. Avez-vous vraiment besoin dune troisième classe avec des sous-classes pour gérer les recherches binaires pour les deux autres classes de données? Peut-être, mais il sagit daugmenter lampleur des classes de données avec un besoin de recherche binaire, alors cela devient un temps réel et un épargnant de bogues davoir une classe qui le fait correctement et qui peut être sous-classée pour gérer les besoins des classes de données. Vous voyez?

La programmation dans le grand format nécessite beaucoup plus de planification et danalyse de la division du travail que la programmation de petits travaux et doutils. Donc oui, si vous avez un projet avec plus de 1000 lignes de code, examinez la conception et trouvez des algorithmes et des fonctions redondants, et décidez si vous pouvez les rassembler dans une seule classe dutilité fonctionnelle ou deux et partager le code pour tous les objets de données. Mais n’en faites pas une quête religieuse d’élimination ultime de la redondance. Et ne croyez pas ceux qui le font.

Réponse

Si cest loption la plus efficace, alors ce nest pas une mauvaise pratique. Cependant, tout qui a une solution plus simple et plus élégante facilement disponible, est une mauvaise pratique .

Dans ce cas, un commutateur géant peut souvent être remplacé par une interface ou permettre à une classe davoir sa propre responsabilité, etc.

Par exemple, si vous avez quelque chose comme ça :

Cette fonctionnera . Le code sera en quelque sorte robuste tant que les valeurs ne seront ajoutées et non modifiées, et il sera même assez efficace car les comparaisons de bits ne prennent pratiquement aucun temps. Mais cela deviendra incontrôlable, difficile à naviguer, et vous déjà devez de toute façon définir ces classes de voitures.

Au lieu de cela, commençons avec quelque chose comme ceci:

Encore une fois, nous avons probablement eu cela de toute façon, juste sans la méthode numberOfCylinders, et donc maintenant notre premier La méthode ressemble à ceci:

Maintenant, imaginez un instant que nous sommes un magasin national de pièces automobiles, et nous avons littéralement des milliers de voitures de différentes marques, modèles, versions, etc. Que si / sinon devenait un énorme monstre, impossible à lire, extrêmement difficile à ajouter ou à supprimer en toute sécurité, etc.

Encore une fois , ce nest pas toujours une mauvaise pratique, et parfois nous aurons besoin dun gros commutateur ou quelque chose comme ça, mais généralement il y a un moyen plus simple de se cacher là-dedans.

MODIFIER: Il y a beaucoup de commentaires sur le fait davoir un n un très grand nombre de combinaisons de voitures (potentiellement des millions à travers lhistoire) et de classes mettant en œuvre Car échouant ici. Bien sûr, à un certain moment, les classes ne fonctionneront pas, et vous stockeriez des fichiers plats dans une base de données et utilisez un accesseur.

Ma réponse visait à montrer lécueil dune utilisation très longue des instructions conditionnelles, pas comme une tentative réelle de créer une architecture de magasin de pièces automobiles.Si vous travaillez chez un grand détaillant automobile, veuillez ne pas prendre ma réponse simple comme base de votre architecture logicielle 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *