Sto progettando un'applicazione ASP.NET MVC utilizzando lo Onion Architecture descritto da Jeffrey Palermo.Dipendenze di archicecture di onion nello stesso livello: infrastruttura e comunicazione Web
Si tratta di un progetto ASP.NET MVC 2.0, in cui è necessario che tutte le viste vengano digitate con i modelli di vista dedicati - non passeremo i modelli di dominio alle nostre visualizzazioni. Stiamo utilizzando AutoMapper per eseguire la traduzione: AutoMapper è isolato nell'infrastruttura, Web non sa o cura che AutoMapper sia in uso.
Attualmente sto definendo le interfacce IViewModelMapping nel progetto Web, semplicemente perché questo servizio verrà utilizzato dai controller e ha accesso diretto ai propri modelli di visualizzazione. In questo modo l'interfaccia può accedere sia ai modelli di dominio (in Core) che ai modelli di visualizzazione (in Web).
Al fine di fornire l'effettiva implementazione delle interfacce IViewModelMapping, ho creato uno spazio dei nomi ObjectMapping nel progetto Infrastructure, che isolerà l'effettiva implementazione della mappatura nell'Intrastruttura della cipolla. In tal modo, ciò richiederà che Infrastructure abbia una dipendenza da BOTH Core AND Web.
La mia domanda è: poiché entrambi questi progetti sono tecnicamente alla periferia della cipolla (nello stesso livello) - un progetto può avere una dipendenza da un altro progetto in quel livello? Qualcuno nota qualche potenziale insidia con questo design?
Un progetto alternativo sposterebbe le interfacce IViewMapper in Core, ma ciò sarebbe impossibile perché Core non ha accesso alle classi ViewModel. Potrei anche spostare i modelli di visualizzazione in Core, ma mi sento come se non appartenessero a loro, poiché sono specifici per il livello dell'interfaccia utente.
L'architettura proposta è la seguente: si noti che Infrastructure ha una dipendenza da Core AND Web. Il Web rimane isolato e ha solo accesso alla logica aziendale principale.
http://www.matthidinger.com/images/onion-arch.png
Qual è stato il design finale che hai scelto e lavorato? Interessante vedere il diagramma aggiornato con una struttura di classi per la mappatura :) –
Domanda: Perché il _Dependency Resolution Layer_ ha una dipendenza dal _Web Layer_? Non dovrebbero _Controllers_ avere una dipendenza dal _Dependency Resolution Layer_? – a11smiles