Sto leggendo Dependency Injection in .NET di Mark Seeman (ottima lettura fino ad ora) e qualcosa mi sfugge.
Se l'architettura dell'applicazione è come [DAL] => [BLL] <= [UI]
, con il livello della logica di business privo di dipendenze su accesso ai dati e livelli dell'interfaccia utente (e entrambi dipendono dalla BLL) e se la radice di composizione si trova nel livello dell'interfaccia utente, quindi come dovremmo essere in grado di collegare l'interfaccia di un tipo nella BLL con un'implementazione presente nel DAL?
Mark Seeman fornisce un esempio tipico: la classe astratta ProductRepository
vive nel BLL e nella classe SqlProductRepository
nel DAL. Potrebbe sembrare una domanda sciocca, ma come si suppone che il layer UI sia in grado di legare ProductRepository
a SqlProductRepository
senza un riferimento al DAL?
I move all the Controllers and ViewModels from the User Interface Layer to the Presentation Model layer, leaving only the Views (the .aspx and .ascx files) and the COMPOSITION ROOT in the User Interface layer.
Il fatto è che sono sicuro che questo ragazzo sappia di cosa sta parlando, quindi quale parte mi è sfuggita?
Inoltre dove dovrei mettere la radice della composizione nel caso di un progetto di libreria di classi? All'inizio pensavo che il BLL sarebbe stato perfetto (dato [DAL] <= [BLL] => [UI]
), ma ora che ho rifatto il mio progetto per invertire letteralmente le dipendenze, non lo so più - avevo una BLL che sapeva sia del DAL e il livello dell'interfaccia utente che legava così tanto i tipi di questi strati era facile, ora nessuno più conosce nessuno, è come se non avessi mai una radice di composizione. Aiutami qui, mi sento come se mi mancasse una pietra miliare fondamentale ...