Ho pensato a questo argomento per un po '.
La mia conclusione è: non è una questione di quantità, ma di qualità e contesto.
Ad esempio, una struttura del progetto corretta batte i commenti che spiegano dove si trovano i file (implementazione vs. intensione)
Allo stesso modo, la classificazione per chiarire il contesto batte la denominazione (Id on a Patient -> Patient.Id).
Credo che DDD abbia voce in capitolo in una buona documentazione: la classificazione fornisce contesto, il contesto crea confini e i confini conducono a implementazioni intenzionali (questo è il posto in cui appartiene, piuttosto che deve esistere).
Il codice in sé non è abbastanza buono per essere considerato documentazione. Il problema nella maggior parte dei casi non risiede nel fatto che il funzionamento dei codici è commentato o non commentato, ma piuttosto la forza trainante (logica del dominio) non lo è.
A volte dimentichiamo chi è il capo - se il codice cambia, la logica del dominio o il ragionamento non dovrebbero, ma se la logica del dominio o il ragionamento cambiano il codice lo farà sicuramente.
Anche la coerenza è molto importante: la convenzione di per sé è inutile se non è coerente.
I modelli di progettazione non sono solo "buone pratiche" - è un linguaggio che noi sviluppatori dovremmo capire. Dire a uno sviluppatore di aggiungere un nuovo tipo a una Factory è meglio inteso che aggiungere un nuovo tipo a un metodo (in cui il contesto e la coerenza sono deboli o mancanti).
Metà della lotta è familiarità .
Inoltre, le API che sembrano favorire molta documentazione sono anche molto sensibili al dominio e al contesto. A volte la duplicazione delle funzionalità non è malvagia (stessa cosa, contesti diversi) e dovrebbe essere trattata separatamente.
In termini di commenti, è sempre bene sottolineare la logica del dominio dietro il ragionamento.
Ad esempio, stai lavorando nel settore medico. Nel tuo metodo scrivi "IsPatientSecure = true;"
Ora, qualsiasi programmatore decente può capire che il paziente viene contrassegnato come sicuro. Ma perché? Quali sono le implicazioni?
In questo caso il paziente è un detenuto trasferito in modo sicuro in un ospedale fuori sede. Sapendo questo, è più facile immaginare gli eventi che portano a questo punto (e forse ciò che deve ancora accadere).
Forse questo post sembra al massimo filosofico - ma ricorda che è il "ragionamento" o la "logica" di cui stai scrivendo - non il codice.