Ich habe den ganzen Tag Artikel über StackOverflow und andere Seiten über die besten Architekturpraktiken gelesen und es gibt so viele widersprüchliche Ideen und Meinungen.Wenn Entity Framework/DbContext das DAL/Repository ist, wo passt es in die 3-Tier-Architektur?
Ich habe mich schließlich auf einen Ansatz festgelegt, aber ich habe eine wirklich harte Zeit zu entscheiden, wo die EF-Objekte (DbContext, Fluent APIs, Seeding Daten, etc.) platzieren. Hier ist, was ich derzeit habe:
ASP.NET MVC Projekt: Das eigentliche Web-Projekt. Enthält die Standardansichten, Controller und View-Modelle (in einem Models Ordner).
Domänenmodellprojekt: Enthält alle POCO-Klassen, die die Objekte der Datenbank (Domäne) definieren. Derzeit werden keine EF-Objekte erwähnt oder referenziert.
Dienstschichtprojekt: Enthält Dienstobjekte für jeden Typ von Domänenobjekt (z. B. IProductService, IOrderService usw.). Jeder Dienst verweist auf EF-Objekte wie DbSets und behandelt Geschäftsregeln - z. B. ein Produkt hinzufügen, ein Produkt zu einem Auftrag hinzufügen usw.
Also die Frage ist, in dieser Konfiguration, wo EF-Klassen gehen? Anfangs dachte ich in der Service-Schicht, aber das scheint keinen Sinn zu ergeben. Ich dachte dann, sie in die Domain Model Layer zu bringen, aber dann bindet sie die Domain Models an EF, was im Wesentlichen ein DAL/Repository ist. Schließlich dachte ich darüber nach, ein separates DAL-Projekt nur für EF zu erstellen, aber es scheint eine riesige Verschwendung zu sein, wenn man bedenkt, dass es wahrscheinlich 3-4 Dateien (DbContext und ein paar andere kleine Dateien) enthalten wird.
Kann jemand irgendeine Anleitung zur Verfügung stellen?
Was treibt Sie an, anstatt nur eines drei Projekte zu erstellen? –
Bessere Erweiterbarkeit. Mit einem separaten Projekt für Domänenmodelle und einem für Dienste können Sie eine andere Anwendung (z. B. eine WinForms-Anwendung) verwenden, die problemlos die Domänen- und Geschäftslogik konsumieren kann, ohne den Code duplizieren zu müssen. Wenn eine WinForms-App und eine MVC-App vorhanden sind, müssen Änderungen an Geschäftsregeln nur an einer Stelle statt an zwei vorgenommen werden. – Amberite