Riepilogo
Come scrive JacquesB, non tutti sono d'accordo con il "Codice pulito" di Robert C. Martin.
I progetti open source che hai scoperto "violano" i principi che ci si aspettava avrebbero semplicemente altri principi.
La mia prospettiva
Mi capita di supervisionare diverse basi di codice che aderiscono molto ai principi di Robert C. Martin. Tuttavia, in realtà non sostengo che siano giusti , posso solo dire che funzionano bene per noi - e che "noi" è in realtà una combinazione di almeno
- l'ambito e l'architettura dei nostri prodotti,
- le aspettative del mercato target / cliente,
- per quanto tempo i prodotti vengono mantenuti,
- la metodologia di sviluppo che utilizziamo,
- la struttura organizzativa della nostra azienda e
- abitudini, opinioni e esperienze passate dei nostri sviluppatori.
Fondamentalmente, questo si riduce a: ogni squadra (che si tratti di un'azienda, di un dipartimento o di un progetto open source) è unica. Avranno priorità diverse e diversi punti di vista, e naturalmente faranno diversi compromessi. Questi compromessi e lo stile del codice in cui si traducono sono in gran parte una questione di gusti e non possono essere dimostrati "sbagliati" o "giusti". Le squadre possono solo dire "lo facciamo perché funziona per noi" o "dovremmo cambiarlo perché non funziona per noi".
Detto questo, credo che per poter mantenere con successo basi di codice di grandi dimensioni nel corso degli anni, ogni squadra dovrebbe concordare un insieme di convenzioni di codice che ritengono siano adatte per gli aspetti sopra indicati. Ciò può significare l'adozione di pratiche di Robert C. Martin, di un altro autore o l'invenzione di una propria; potrebbe significare scriverli formalmente o documentarli "con l'esempio". Ma dovrebbero esistere.
Esempio
Considera la pratica di "suddividere il codice da un metodo lungo in diversi metodi privati".
Robert C. Martin afferma che questo stile consente di limitare il contenuto di ciascun metodo a un livello di astrazione - come esempio semplificato, un metodo pubblico probabilmente consisterebbe solo in chiamate a metodi privati come verifyInput(...)
, loadDataFromHardDisk(...)
, transformDataToJson(...)
e infine sendJsonToClient(...)
, e questi metodi avrebbero i dettagli di implementazione.
- Alcune persone amano questo perché i lettori possono avere una rapida panoramica dei passaggi di alto livello e possono scegliere i dettagli di cui vogliono leggere.
- A qualcuno non piace perché quando vuoi conoscere tutti i dettagli, devi saltare nella classe per seguire il flusso di esecuzione (questo è ciò a cui JacquesB si riferisce probabilmente quando scrive di aggiungere complessità).
La lezione è: tutti hanno ragione, perché hanno il diritto di avere un'opinione.