Frage

Ich bin die Gestaltung eine ASP.NET MVC-Anwendung mit der Onion Architektur beschrieben von Jeffrey Palermo.

Es ist ein ASP.NET MVC 2.0-Projekt, wo ich bin erforderlich, dass alle Ansichten stark Modelle mit dedizierter Ansicht eingegeben werden - wir werden nicht vorbei Domain-Modelle in unsere Ansichten werden. Wir AutoMapper werden mit der Übersetzung zu tun -. AutoMapper in der Infrastruktur isoliert ist, braucht Web nicht wissen, oder darauf, dass AutoMapper verwendet wird

Derzeit bin ich die Definition des IViewModelMapping Schnittstellen im Webprojekt - einfach, weil dieser Service durch den Controller verwendet wird, und es direkten Zugang zu seinen eigenen Ansicht Modelle hat. Auf diese Weise die Schnittstelle die beiden Domain-Modelle zugreifen kann (in Core) und die Ansicht Modelle (in Web).

Um die tatsächliche Umsetzung der IViewModelMapping Schnittstellen zur Verfügung zu stellen, habe ich eine ObjectMapping Namespace im Infrastruktur-Projekt, das die tatsächliche Mapping-Implementierung des intra der Zwiebel wird isolieren. Dabei wird diese Infrastruktur erfordert auf beiden Kernen und Web eine Abhängigkeit zu haben.

Meine Frage ist: da diese beiden Projekte technisch am Rande der Zwiebel (in der gleichen Schicht) ist - ist ein Projekt eine Abhängigkeit von einem anderen Projekt in dieser Schicht haben darf? Hat jemand Mitteilung mögliche Gefahren mit diesem Motiv?

Eine alternative Konstruktion würde die IViewMapper Schnittstellen in Kern bewegen - aber dies unmöglich wäre, weil Kern keinen Zugang zu den Klassen Ansichtsmodell hat. Ich konnte auch die Ansicht Modelle in Kern bewegen, aber ich fühle mich wie sie es nicht, gehören dort, da sie spezifisch für die UI-Ebene sind.

Die vorgeschlagene Architektur ist folgt als - Hinweis, dass Infrastruktur eine Abhängigkeit von Kern und Web hat. Web bleibt isoliert und hat nur Zugriff auf die Kerngeschäftslogik.

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

War es hilfreich?

Lösung

Sie sind richtig, dass Sie keine Infrastruktur wollen auf UI (Web) hängen, aber ich diese Regel bricht manchmal.

Ich würde denken, statt IViewModelMapping, erstellen IMapper mit Methode Karte (). Dann kann die Schnittstellenimplementierungen, die mit View-Modell-Mapping, oder vielleicht auch nur reguläre Abbildung könnte zu tun haben. So oder so, kann diese Schnittstelle in Kern sein, weil es nicht semantisch auf jede Art von Modell gebunden ist.

Große Grafik. Ich hoffe, dass ich das Fleisch Ihrer Frage beantwortet. Die allgemeine Philosophie der Zwiebel Architektur Ihre Business-Logik und das Modell in der Mitte (Core) der Anwendung zu halten und schieben Sie Ihre Abhängigkeiten so weit nach außen wie möglich.

Andere Tipps

Versuchen Sie zu bewegen Objektzuordnung in Web Schicht.

Ihre Web / UI-Schicht kann auf Infrastruktur-Schicht abhängig sein. Aber es ist kein gutes Design Abhängigkeit von Web Infrastrukturschicht zu haben. Onion Architektur sagt schieben Sie Ihre Abhängigkeiten so weit nach außen wie möglich.

Sie können einen "\ Builder" -Ordner in UI erstellen. Fügen Sie eine Schnittstellendatei darin, Beispiel .. IBuilder oder IMapper und erklären, ein Verfahren wie ConvertToViewModel oder CreateMapping drin. was auch immer Sie mögen.

* Builder ** IBuilder.cs -declare ein Verfahren hier. ** Builder.cs - - Umsetzung des Verfahrens hier definieren Zuordnung zwischen einer Ansichtsmodell und DomainModel (Referenz aus Kernschicht) und das Rück entsprechende Ansichtsmodell ist hier entsprechend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top