5

Ich versuche ein neues Projekt (asp.net MVC) zu starten und möchte einige DDD-Regeln anwenden, die ich in den letzten Monaten gelernt habe.
Ich weiß jedoch nicht, wie ich meine Lösung organisieren soll.
Ich möchte Nhibernate verwenden, aber ich möchte nicht Fluent Nhibernate verwenden, weil es so etwas wie ein Experiment sein muss.
Ich habe einige Beispiele gesehen, wo Leute alles im selben Projekt behalten. Einige andere neigen dazu, für alles ein anderes Projekt zu erstellen. Glauben Sie, ich sollte das Modell und das Repository unterscheiden oder es in dasselbe Projekt einfügen?
Wenn jemand einige Links zu Artikeln usw. hat, würde es geschätzt werden.
So organisieren Sie eine ASP.NET MVC-Lösung (DDD)

dank

Alberto

+0

Nicht jedes Projekt mit asp.net mvc, ddd und nhibernate wird in eine "Standard" -Architektur passen. Die Art und Weise, wie Sie das Projekt organisieren, hängt davon ab, was Ihr Projekt leistet. Es gibt nur eine Sache, die ich für jede Anwendung mache: Ich lege die Präsentationslogik (asp.net mvc in diesem Fall) in ein separates Projekt von der Geschäftslogik (in diesem Fall ddd?). Welche Art von Webanwendung möchten Sie erstellen und wie möchten Sie DDD in dieser Anwendung verwenden? – Paco

Antwort

4

Ich persönlich denke, jede Schicht in ein separates Projekt zu teilen ist eine bessere Idee. Es gibt bestimmte Dinge, die Sie nicht mit einem großen ASP.NET MVC-Projekt erreichen können, das alle Ihre Ebenen enthält.

Angenommen, Sie haben eine Produkt und ProductFactory Klasse. Sie möchten die Erstellung eines Produkts über ProductFactory erzwingen. Um dies zu erreichen, können Sie den Konstruktor Produkt Klasse intern machen.Auf diese Weise kann ProductFactory Klasse eine Produkt Klasse instanziiert weil Produkt und ProductFactory in derselben Baugruppe ist. Wenn Sie jedoch versuchen, eine -Produkt-Klasse aus einem anderen Projekt (z. B. Ihrem ASP.NET MVC-Projekt) zu instanziieren, erhalten Sie einen Fehler bei der Kompilierung. Auf diese Weise können Sie eine bessere Kapselung erreichen.

Beachten Sie, dass, wenn Produkt, ProductFactory und Ihre -Controller im selben Projekt sind, können Sie immer noch die Produkt ‚s Konstruktor in Ihrem -Controller sehen. Also ein Amateur-Entwickler, der die architektonischen Entscheidungen hinter Ihrem Design nicht versteht und einfach ignorieren kann ProductFactory und ein Produkt Objekt direkt erstellen.

Plus, ein separates Projekt für jeden Layer macht Ihre Wartung einfacher, weil Sie kleinere Projekte bearbeiten müssen, im Gegensatz zu einem großen Projekt.

+0

Danke Mosh. Beste Antwort ... etwas Verständliches :-) – LeftyX

5

Jimmy Bogard (Autor von AutoMapper) hat einen ausgezeichneten article, wie er Strukturen seinen Code geschrieben, die helfen, Ihre Entscheidung helfen können.

Ich habe an Projekten mit Tonnen von separaten Baugruppen und Projekten gearbeitet, die eine kleine Anzahl haben. Meine persönliche Präferenz ist es, weniger Assemblies zu haben, da ich immer einfacher damit arbeiten kann. Wenn Sie gute Kodierungsprinzipien (wie SOLID) verwenden, sollte es keine Rolle spielen, wenn Sie 2 oder 20 Baugruppen verwenden.

2

Es hängt davon ab, wie groß Ihr Projekt ist, aber ich würde für verschiedene Projekte für das Modell und das Repository gehen. Meiner Meinung nach ist es nicht angebracht, die Sachen deines Modells im Modellordner des WEB-Mvc-Projekts zu behalten. Es wird dort zu voll :)

Es ist wichtig in DDD Technologie Elemente nicht in Ihrer Domänenlogik (wie NHibernate, das Sie verwenden möchten oder andere ORM zum Beispiel) einzuführen. Dies geschieht normalerweise mit dem Erstellen der sogenannten Anti-Korruptionsschicht.

Zusätzlich zu Repository-Mustern sollten Sie die Verwendung von Spezifikationsmustern zum Filtern von Daten aus dem Repository in Erwägung ziehen.

0

MVC2 hat das Konzept von Bereichen, die Trennung von Interesse erstellen. Ich mag immer noch nicht, wie es umgesetzt wird. Ich erstelle ein separates Projekt für praktisch jeden Controller. Auf diese Weise kann ich Controller in neuen Projekten, an denen ich arbeite, kombinieren. Ein gutes Beispiel ist ein Projekt mit dem Namen "Security", das alle Anmeldungs- und Benutzerverwaltungsaufgaben erledigt. Ein anderes Projekt, das ich habe, heißt Notification, das alle Nachrichten und E-Mails behandelt. Was ich mache, um diese zusammenzubringen, ist, dass ich ein Kernprojekt für jedes Projekt erstelle, an dem ich arbeite, und dann importiere ich in die DLLs von dem anderen Projekt und alles was ich sicherstellen muss ist, dass ich die Ansichten und Javascript an Ort und Stelle habe Arbeit.

Verwandte Themen