Domanda

Sto progettando un ASP.NET applicazione MVC utilizzando il Cipolla Architettura descritto da Jeffrey Palermo.

Si tratta di un ASP.NET MVC 2.0 progetto, dove sto richiedendo che tutte le viste essere fortemente tipizzato con l'utilizzo di appositi Modelli di Visualizzazione -- non ci sarà il passaggio di modelli di dominio per il nostro punto di vista.Stiamo usando AutoMapper a fare la traduzione -- AutoMapper è isolato nelle infrastrutture, Web non conosce o di cura che AutoMapper viene utilizzato.

Attualmente, sto definendo la IViewModelMapping interfacce del progetto Web, semplicemente perché questo servizio sarà utilizzato dal Controller e dispone di accesso diretto alla propria Visualizzazione di Modelli.In questo modo l'interfaccia può accedere a entrambi i Modelli di Dominio (nel Nucleo) e la Visualizzazione di Modelli (nel Web).

Al fine di fornire l'effettiva attuazione di IViewModelMapping interfacce, ho creato un ObjectMapping spazio dei nomi nel progetto di Infrastruttura, che sono in grado di isolare la corrispondenza effettiva attuazione al Intrastructure della cipolla.In tal modo, sarà necessario disporre di Infrastrutture di avere una dipendenza su ENTRAMBI i Core E Web.

La mia domanda è:dal momento che entrambi questi progetti sono tecnicamente alla periferia della cipolla (allo stesso livello) -- è un progetto che ha permesso di avere una dipendenza per un altro progetto che livello?Qualcuno di preavviso potenziali problemi con questo disegno?

Un'alternativa sarebbe spostare il IViewMapper interfaccia Core-ma questo sarebbe impossibile, poiché Core non hanno accesso alle classi ViewModel.Potrei anche spostare la visualizzazione di modelli in Core, ma mi sembra che non ci appartengono, dal momento che sono specifici per il livello di interfaccia utente.

L'architettura proposta è come segue -- notare che l'Infrastruttura ha una dipendenza Core E Web.Web rimane isolato e ha accesso solo al Core business logic.

http://www.matthidinger.com/images/onion-arch.png

È stato utile?

Soluzione

Hai ragione che non si desidera Infrastrutture dipendono dall'interfaccia utente(Web), ma mi rompono che regola a volte.

Io penso che invece di IViewModelMapping, creare IMapper con il metodo Map().Quindi, l'interfaccia può avere implementazioni che potrebbero avere a che fare con il modello di visualizzazione di mappatura, o forse solo di regolare la mappatura.Ad ogni modo, che l'interfaccia può essere in Core, perché non è semanticamente legato a qualsiasi tipo di modello.

Grande grafica.Spero che ho risposto alla carne della tua domanda.La filosofia generale della Cipolla Architettura è di mantenere il vostro logica di business e il modello al centro (Core) dell'applicazione e spingere il vostro dipendenze molto verso l'esterno possibile.

Altri suggerimenti

Provare a spostare Oggetto Di Mappatura in Web livello.

Il Web/UI layer può essere dipendente da Infrastrutture di livello.Ma non è una buona progettazione a dipendenza del Web su Infrastrutture di livello.Cipolla architettura dice di spingere le proprie dipendenze come molto verso l'esterno possibile.

È possibile creare un "\" Generatore di cartella UI.Aggiungere una interfaccia di file,ad esempio..IBuilder o IMapper e dichiarare un metodo come ConvertToViewModel o CreateMapping in esso.che cosa ti piace.

*Generatore **IBuilder.cs -dichiarare un metodo qui.**Generatore.cs -- - Implementare il metodo qui,definire il mapping tra un ViewModel e corrispondente DomainModel( riferimento da strato di base) e ritorno appropriato ViewModel qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top