Sommario
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 ti aspettavi probabilmente avranno semplicemente altri principi.
La mia prospettiva
Mi capita di supervisionare diverse basi di codice che aderiscono molto ai principi di Robert C. Martin. Tuttavia, non pretendo davvero che abbiano ragione , posso solo dire che funzionano bene per noi - e che "noi" è in realtà una combinazione di almeno
- la portata e l'architettura dei nostri prodotti,
- il mercato di riferimento / aspettative dei clienti,
- per quanto tempo vengono mantenuti i prodotti,
- la metodologia di sviluppo che utilizziamo,
- la struttura organizzativa della nostra azienda e
- abitudini, opinioni ed esperienze passate dei nostri sviluppatori.
Fondamentalmente, questo si riduce a: ogni squadra (sia essa un'azienda, un dipartimento o un progetto open source) è unica. Avranno priorità e punti di vista diversi e ovviamente faranno diversi compromessi. Questi compromessi e lo stile di codice che ne risultano sono in gran parte una questione di gusti e non possono essere dimostrati "sbagliati" o "giusti". I team possono solo dire "lo facciamo perché funziona per noi" o "dovremmo cambiarlo perché non funziona per noi".
Detto questo, credo che per essere in grado di mantenere con successo basi di codice di grandi dimensioni nel corso degli anni, ogni squadra dovrebbe concordare una serie di convenzioni di codice che ritengono adatte agli aspetti sopra indicati. Ciò può significare adottare pratiche di Robert C. Martin, di un altro autore o inventarne le proprie; può significare scriverli formalmente o documentarli "per esempio". Ma dovrebbero esistere.
Esempio
Considera la pratica di "dividere il codice da un metodo lungo in diversi metodi privati".
Robert C. Martin dice che questo stile permette di limitare il contenuto di ogni metodo per un livello di astrazione - come un esempio semplificato, un metodo pubblico sarebbe probabilmente consistere solo di chiamate ai metodi privati come verifyInput(...)
, loadDataFromHardDisk(...)
, transformDataToJson(...)
e, infine sendJsonToClient(...)
, e questi metodi avrebbe i dettagli di implementazione.
- Ad alcune persone piace perché i lettori possono avere una rapida panoramica dei passaggi di alto livello e possono scegliere quali dettagli vogliono leggere.
- Ad alcune persone non piace perché quando vuoi conoscere tutti i dettagli, devi saltare in classe per seguire il flusso di esecuzione (questo è probabilmente ciò a cui JacquesB si riferisce quando scrive di aggiungere complessità).
La lezione è: tutti hanno ragione, perché hanno il diritto di avere un'opinione.