Sommaire
Comme l'écrit JacquesB, tout le monde n'est pas d'accord avec le "code propre" de Robert C. Martin.
Les projets open source que vous avez trouvés "violés" par les principes auxquels vous vous attendiez sont susceptibles de comporter simplement d'autres principes.
Ma perseption
Il se trouve que je supervise plusieurs bases de code qui adhèrent beaucoup aux principes de Robert C. Martin. Cependant, je ne prétends pas vraiment qu'ils ont raison , je peux seulement dire qu'ils fonctionnent bien pour nous - et que "nous" est en fait une combinaison d'au moins
- la portée et l'architecture de nos produits,
- le marché cible / les attentes du client,
- combien de temps les produits sont maintenus,
- la méthodologie de développement que nous utilisons,
- la structure organisationnelle de notre entreprise et
- les habitudes, opinions et expériences passées de nos développeurs.
En gros, cela se résume à ceci: chaque équipe (qu’il s’agisse d’une entreprise, d’un département ou d’un projet open source) est unique. Ils auront des priorités et des points de vue différents et, bien entendu, ils feront des compromis différents. Ces compromis, et le style de code auquel ils résultent, sont en grande partie une question de goût et il ne peut être prouvé qu'ils sont "faux" ou "correct". Les équipes peuvent seulement dire "nous faisons cela parce que cela fonctionne pour nous" ou "nous devrions changer cela parce que cela ne fonctionne pas pour nous".
Cela dit, je pense que pour pouvoir gérer avec succès de grandes bases de code au fil des ans, chaque équipe doit s’accorder sur un ensemble de conventions de code qu’elles estiment appropriées aux aspects mentionnés ci-dessus. Cela peut signifier adopter des pratiques de Robert C. Martin, d'un autre auteur, ou inventer les siennes; cela peut vouloir dire les écrire formellement ou les documenter "par exemple". Mais ils devraient exister.
Exemple
Considérons la pratique consistant à "diviser le code d’une méthode longue en plusieurs méthodes privées".
Robert C. Martin dit que ce style permet de limiter le contenu de chaque méthode pour un niveau d'abstraction - comme un exemple simplifié, une méthode publique consisterait probablement des appels à des méthodes privées comme verifyInput(...)
, loadDataFromHardDisk(...)
, transformDataToJson(...)
et enfin sendJsonToClient(...)
, et ces méthodes aurait les détails de la mise en œuvre.
- Certaines personnes aiment cela, car les lecteurs peuvent obtenir un aperçu rapide des étapes de haut niveau et choisir quels détails ils souhaitent lire.
- Certaines personnes ne l'aiment pas parce que, lorsque vous souhaitez connaître tous les détails, vous devez parcourir la classe pour suivre le déroulement de l'exécution (c'est à cela que JacquesB fait probablement référence lorsqu'il écrit sur l'ajout de complexité).
La leçon est la suivante: ils ont tous raison, car ils ont le droit d’avoir une opinion.