Se dovessimo generalizzare la regola un po 'e renderla meno legalistica, potrebbe essere qualcosa del genere:
Limit what each module/class/function/etc knows about the rest of the system.
Quindi hai due tipi di codice:
- Codice che incolla i nostri strati di astrazione insieme (App)
- La carne del software che risolve effettivamente un problema (Libro, Database)
Il codice della colla esiste solo in modo che il codice della carne possa fare il suo lavoro. Indipendentemente dal tipo di codice che stai scrivendo, non vuoi che le tue funzioni o moduli conoscano troppo le altre aree del tuo software. Questo è per ragioni di manutenibilità; più pezzi di codice vengono toccati da un modulo, più è probabile che dovrai modificare il codice in tutte quelle aree. Yuck.
Ora, quando scrivi il codice "colla", dovrai ovviamente occuparti di moduli che sono ampiamente diffusi nel tuo software. Ma in realtà non utilizzi usando quei moduli. Il codice della colla è in realtà piuttosto stupido. Si tratta di chiamare alcuni costruttori e per lo più solo mescolare riferimenti a oggetti. Se la tua applicazione diventa abbastanza grande, il tuo codice collettivo diventerà piuttosto grande e complesso, ma questo è ciò che il schema di fabbrica è per .
Quindi, ai miei occhi, è corretto attraversare più livelli di astrazione nel codice della colla, a patto che il codice della colla rimanga non informato su come questi livelli stanno effettivamente lavorando insieme.
Nota a margine:
Dovresti esaminare l'inversione dei contenitori di controllo . Sono ottimi piccoli strumenti che consentono di veramente ridurre al minimo la quantità di codice di colla che si deve scrivere, aumentando potenzialmente la manutenibilità.