Les méthodes longues sont généralement considérées comme mauvaises, mais dans mon code, j'ai des méthodes longues difficiles à comprendre (plus de 50 lignes). J'ai du mal à rendre ces méthodes plus faciles à lire, car une seule instruction à l'intérieur fait déjà plus de 50 lignes et cette instruction unique difficile à lire consiste à créer une requête de base de données à l'aide d'un ORM pour effectuer un travail spécifique là où le travail est effectué. clairement indiqué sur le nom de la méthode. La raison pour laquelle l'instruction est si longue car elle se joint à plusieurs colonnes, applique plusieurs emplacements et sélectionne plusieurs colonnes distinctes pour créer un format de sortie documenté requis.
Un tel code difficile à lire est-il considéré comme un mauvais code? De même, si j'écris du code pour un algorithme compliqué résultant en un code difficile à lire enveloppé dans une méthode clairement nommée, ce code est-il un mauvais code?
la source
Réponses:
Tu as écrit
vous êtes donc tout à fait d'accord pour dire que c'est du code difficile à lire , et s'il est difficile à lire, il est difficile à maintenir et à évoluer - donc je suppose que vous considérez le code comme étant "mauvais" par vos propres mesures. Cependant, il n'est parfois pas évident de savoir comment améliorer quelque chose comme une instruction SQL de 50 lignes. Les refactorisations simples de la «méthode d'extraction» ne fonctionnent pas, et vous n'avez probablement aucune idée par où commencer pour rendre le code plus lisible. Pour ces cas, vous pouvez toujours essayer une ou toutes les solutions suivantes
montrez le code à quelqu'un d'autre qui est plus expérimenté que vous dans le nettoyage du code. Si vous ne pouvez pas demander à quelqu'un dans votre organisation, essayez codereview.stackexchange
essayez de google pour le problème spécifique. Pour votre exemple, des choses comme «nettoyer une instruction sql longue» pourraient être un bon début. Vous serez étonné du nombre d'articles que vous trouverez sur ce sujet, et même si vous ne trouvez pas de recette braindead pour votre cas, vous pourriez avoir de nouvelles idées
au lieu de demander une justification pour les choses que vous ne pouvez pas faire, concentrez-vous sur les choses que vous pouvez faire pour nettoyer le code au moins un peu, comme ajouter des sauts de ligne appropriés, une indentation appropriée, ajouter des commentaires explicatifs, améliorer certaines variables Nom. Il n'est pas improbable, au cours de ce processus, de vous forcer à relire les détails du code, vous trouverez un moyen de refactoriser le code en unités plus petites
pratique, pratique, pratique. Le "codage propre" n'est pas quelque chose que vous apprenez en une journée, il devient plus facile avec plus d'expérience. Peut-être que vous ne trouvez pas de solution à votre problème aujourd'hui, mais lorsque vous reviendrez au code dans quelques mois, il vous semblera différent.
la source
Difficile à lire n'est pas mauvais - inutilement difficile à lire est mauvais.
Certaines choses sont tout simplement difficiles. Dans ce cas, vous devez comprendre complètement le problème, écrire le code et le commenter aussi bien que possible afin que le prochain développeur ait une chance.
Mais certaines choses ne sont difficiles que parce que vous les avez rendues difficiles. Si le problème peut être simplifié et rendu plus facile, simplifiez-le. S'il est difficile à comprendre mais peut être raisonnablement divisé en sous-problèmes, divisez-le en sous-problèmes pour le simplifier.
la source
ORM pour créer un rapport? Sérieusement? Apprenez du SQL, mec. Les langages procéduraux sont terribles dans ce genre de choses.
SQL est un langage beaucoup mieux conçu pour gérer les jointures et les sélections compliquées. Et même si vous ne pouvez pas rendre le SQL beau, il existe toutes sortes d'outils de visualisation disponibles où vous pouvez faire glisser et déposer des objets de base de données sur un diagramme et le SQL sera généré pour vous. Sans oublier que vous serez en mesure de régler et d'optimiser la requête, d'afficher son plan de requête, de demander à la plate-forme de suggérer des options d'indexation supplémentaires, etc. C'est juste beaucoup plus flexible.
Je suis sûr que certaines personnes ici en désaccord avec moi, mais ORM n'est pas un bon moyen pour des rapports compliqués. Si possible, j'envisagerais de m'éloigner de cela et d'aller vers le langage de requête structuré .
la source
En général, le code difficile à lire est une mauvaise idée n'importe où - même si vous êtes le seul responsable - j'ai eu plusieurs fois le retour à quelques années de code ou même des semaines plus tard et à avoir du mal à comprendre.
Si vous devez faire beaucoup de choses dans une seule requête, essayez de la diviser en plusieurs lignes avec des commentaires intégrés:
Devient:
la source
En plus de l'excellente réponse de @ DocBrown, je pense qu'il vaut la peine de reconnaître que personne n'écrit du "bon" code tout le temps. Le codage fait des compromis, et il est souvent préférable d'accepter que vous avez écrit quelque chose d'un peu moins propre que vous ne le souhaiteriez et d'y revenir plus tard. La refactorisation est le processus d'amélioration du code au fil du temps - et d'après mon expérience, c'est ce qui fait une bonne base de code, et non pas «faire les choses correctement du premier coup».
Et vous évaluez le code au niveau de l'application, pas au niveau des méthodes / lignes de code individuelles. Donc, si vous avez une méthode complexe, mais qu'elle est clairement nommée, je ne pense pas que vous ayez un "mauvais" code tant que la méthode est cohérente.
La dénomination est la plus grande arme dont vous disposez pour rendre le code intelligible - donnez à votre méthode un nom qui permet aux gens qui lisent votre code de sauter le corps s'ils en ont besoin. Nommez vos variables, etc. de manière à ce que les lecteurs puissent voir ce qu'ils représentent sans avoir à lire leurs instructions d'affectation.
La prochaine chose est de vous assurer que votre méthode ne fait qu'une seule chose - les effets secondaires rendent le code difficile à comprendre. Donc, si votre méthode renvoie des données pour un format de sortie, elle ne doit pas également mettre à jour le statut de votre base de données sur "imprimé", ou autre chose.
La superposition / composante est la prochaine chose que vous pourriez faire - si vous avez un tas de méthodes complexes qui génèrent des résultats ORM, regroupez-les afin que les lecteurs de votre code puissent supposer qu'ils se comportent tous de la même manière, n'ont aucun effet secondaire, etc.
la source