Ich entwerfe eine ASP.NET MVC-Anwendung mit der Onion Architecture von Jeffrey Palermo beschrieben.Onion Architektur Abhängigkeiten in der gleichen Schicht: Infrastruktur und Web-Kommunikation
Es ist ein ASP.NET MVC 2.0-Projekt, wo ich alle Ansichten stark mit dedizierten Ansichtsmodellen typisiert werden müssen - wir werden keine Domänenmodelle an unsere Ansichten übergeben. Wir verwenden AutoMapper für die Übersetzung - AutoMapper ist in der Infrastruktur isoliert, das Web weiß nicht, ob AutoMapper verwendet wird oder nicht.
Derzeit definiere ich die IViewModelMapping-Schnittstellen im Webprojekt - einfach weil dieser Dienst von den Controllern verwendet wird und er direkten Zugriff auf seine eigenen Ansichtsmodelle hat. Auf diese Weise kann die Schnittstelle sowohl auf die Domänenmodelle (im Kern) als auch auf die Ansichtsmodelle (im Web) zugreifen.
Um die tatsächliche Implementierung der IViewModelMapping-Schnittstellen bereitzustellen, habe ich im Infrastructure-Projekt einen ObjectMapping-Namespace erstellt, der die tatsächliche Mapping-Implementierung auf die Intrastruktur des Onion isoliert. Dies setzt voraus, dass die Infrastruktur von BEIDE Core AND Web abhängig ist.
Meine Frage ist: Da beide Projekte technisch am Rande der Zwiebel (in der gleichen Schicht) sind - darf ein Projekt eine Abhängigkeit von einem anderen Projekt in dieser Schicht haben? Wer bemerkt irgendwelche möglichen Fallstricke mit diesem Entwurf?
Ein alternativer Entwurf wäre das Verschieben der IViewMapper-Schnittstellen in Core - aber das wäre unmöglich, da Core keinen Zugriff auf die ViewModel-Klassen hat. Ich könnte die Ansichtsmodelle auch in Core verschieben, aber ich glaube, sie würden nicht dorthin gehören, da sie spezifisch für die UI-Ebene sind.
Die vorgeschlagene Architektur ist wie folgt - beachten Sie, dass Infrastruktur eine Abhängigkeit von Core AND Web hat. Das Web bleibt isoliert und hat nur Zugriff auf die Kerngeschäftslogik.
http://www.matthidinger.com/images/onion-arch.png
Was war das endgültige Design, das Sie ausgewählt und bearbeitet haben? Interessant, das aktualisierte Diagramm mit einer Klassenstruktur für das Mapping zu sehen :) –
Frage: Warum hat der _Dependency Resolution Layer_ eine Abhängigkeit vom _Web Layer_? Sollte _Controllers_ nicht vom _Dependency Resolution Layer_ abhängig sein? – a11smiles