Je réfléchis à ce sujet depuis un moment.
Ma conclusion est - ce n'est pas une question de quantité, mais de qualité et de contexte.
Par exemple, une structure de projet appropriée bat les commentaires expliquant où se trouvent les fichiers (implémentation vs intension)
De même, la classification pour clarifier le contexte bat la dénomination (Id sur un patient -> Patient.Id).
Je crois que DDD a son mot à dire dans une bonne documentation - la classification fournit le contexte, le contexte crée des limites et les limites mènent à des implémentations intentionnelles (c'est là que cela appartient, plutôt que d'exister).
Le code en soi n'est pas assez bon pour être considéré comme de la documentation. Le problème dans la plupart des cas ne réside pas dans le fait que le fonctionnement des codes est commenté ou non, mais plutôt la force motrice (logique du domaine) ne l'est pas.
Nous oublions parfois qui est le patron - si le code change, la logique ou le raisonnement du domaine ne devrait pas, mais si la logique ou le raisonnement du domaine change, le code le sera certainement.
La cohérence est également très importante - la convention en soi est inutile si elle n'est pas cohérente.
Les modèles de conception ne sont pas seulement des «bonnes pratiques» - c'est un langage que les développeurs doivent comprendre. Il est préférable de dire à un développeur d'ajouter un nouveau type à une usine que d'ajouter un nouveau type à une méthode (où le contexte et la cohérence sont faibles ou manquants).
La moitié de la lutte est la familiarité .
Par ailleurs, les API qui semblent favoriser beaucoup de documentation sont également très sensibles au domaine et au contexte. Parfois, la duplication de fonctionnalités n'est pas mauvaise (même chose, différents contextes) et doit être traitée comme distincte.
En termes de commentaires, il est toujours bon de souligner la logique du domaine derrière le raisonnement.
Par exemple, vous travaillez dans l'industrie médicale. Dans votre méthode, vous écrivez "IsPatientSecure = true;"
Maintenant, tout programmeur décent peut comprendre que le patient est marqué comme sécurisé. Mais pourquoi? Quelles en sont les implications?
Dans ce cas, le patient est un détenu qui a été transféré en toute sécurité dans un hôpital hors établissement. Sachant cela, il est plus facile d'imaginer les événements qui ont mené à ce point (et peut-être ce qui doit encore se produire).
Peut-être que ce post semble au mieux philosophique - mais rappelez-vous que c'est le «raisonnement» ou la «logique» que vous écrivez - pas le code.