1. Grundwissensvorbereitung:
1. Prinzipien der Schichten:
(1) Jede Schicht verwendet eine Schnittstelle für Aufrufe aus der oberen Schicht.
(2) Die obere Schicht kann nur die untere Schicht aufrufen.
(3) Abhängigkeiten werden in zwei Typen unterteilt: lockere Interaktion und strikte Interaktion.
2. Klassifizierung der Geschäftslogik:
(1) Anwendungslogik.
(2) Domänenlogik.
3. Angenommene Schichten:
(1) Präsentationsschicht (Benutzeroberflächenschicht): domänenunabhängig.
(2) Serviceschicht (Anwendungsschicht): Anwendungslogik.
(3) Geschäftslogikschicht (Domänenschicht): Domänenlogik.
(4) Gemeinsam genutzte Ebene: Stellt gemeinsamen Code bereit.
(5) Implementierungsschicht: Bietet Schnittstellenimplementierung.
4. Vereinbarung:
(1) Die Domänenschicht verwendet standardmäßig das Domänenmodell
(2) Die Datenzugriffsschicht muss standardmäßig auf das Domänenmodell verweisen
2. Schichtarchitektur
Die drei Grundebenen der Schichtarchitektur sind: Präsentationsschicht, Geschäftslogikschicht und Datenzugriffsschicht. Wenn die Geschäftslogikschicht entsprechend der Klassifizierung der Geschäftslogik in Serviceschicht und Domänenschicht zerlegt wird, werden die drei Schichten in vier Schichten erweitert: Präsentationsschicht, Serviceschicht, Domänenschicht und Datenzugriffsschicht. Die Datenzugriffsschicht muss im Allgemeinen das Domänenmodell verstehen, wodurch wechselseitige Abhängigkeiten zwischen den Schichten entstehen:
1. Platzieren Sie das Domänenmodell in der gemeinsam genutzten Ebene:
Bewertung: PetShop übernimmt dieses Modell, weist jedoch viele Mängel auf: Die Geschäftslogikschicht verdient ihren Namen nicht und das Domänenmodell ist eigentlich ein Datenmodell, das die Zwischenschicht verwaltet Abhängigkeiten und führt weitere Abhängigkeiten ein, was offensichtlich eine datengesteuerte Idee ist, nicht mit der Domäne als Kern.
2. Definieren Sie die Datenzugriffsschnittstelle in der Geschäftslogikschicht:
Bewertung: NopCommerce übernimmt dieses Modell, auch wenn es ist getrennt Die Serviceschicht wurde entfernt und die Benennungsmethode der Ressourcenbibliothek übernommen. NopCommerce ist jedoch keine DDD-Schichtarchitektur, sondern eine gewöhnliche dreistufige Architektur, die die Prinzipien der Domänenmodell- und Schnittstellentrennung übernimmt. Nachteile: Abgesehen von der Datenimmobilie sind keine weiteren spezifischen technischen Abhängigkeiten von der Geschäftslogikschicht getrennt.
3. DDD-Schichtung:
DDD-Schichtung unterteilt die Geschäftslogikschicht klar in zwei Teile: die Anwendungsschicht (Dienstschicht) und die Domänenschicht. Gleichzeitig werden die spezifischen technischen Implementierungsteile des Datenzugriffs und anderer Schnittstellen in der Infrastrukturschicht vereinheitlicht.
Original DDD-Schichtung:
Bewertung: Der Vorteil ist das Spezifische Die Technologieimplementierung wird von der Domäne getrennt und der Wiederverwendungswert der Infrastrukturschicht steigt. Der Nachteil besteht darin, dass die Konzepte der gemeinsamen Nutzung und Implementierung nicht zur Unterteilung der Infrastrukturschicht verwendet werden, was zu umgekehrten Abhängigkeiten bei der Implementierung von Warehousing in der Infrastrukturschicht führt. Dies hat jedoch keine Auswirkungen auf eine Einzelprojektlösung (nur formale Abhängigkeiten auf der Namespace-Ebene). ), In der .NET-Multiprojektlösung kann die Warehousing-Implementierung jedoch nur durch Schnittstellentrennung in eine ähnliche Datenzugriffsschicht aufgeteilt werden.
2. Verbesserte DDD-Schichtung:
Bewertung: Die Infrastrukturschicht weist die Eigenschaften sowohl der Freigabeschicht als auch der Implementierungsschicht auf . Der Vorteil besteht darin, dass die Domäne letztendlich formal den Kern darstellt, und es beseitigt auch die Peinlichkeit, bei der Implementierung von Warehousing in der Infrastrukturschicht nicht auf das Domänenmodell verweisen zu können. Der Nachteil besteht darin, dass es auch keinen Unterschied zwischen den Konzepten der gemeinsamen Nutzung und der Implementierung gibt .
3. Die neueste DDD-Schichtung:
Bewertung: Der Vorteil besteht darin, dass dies wirklich domänenzentriert ist und keine erneute Anpassung in der Serviceschicht erforderlich ist, da die Infrastrukturschicht nicht auf die Domänenschicht verweisen kann. Verwenden Sie das Prinzip der Abhängigkeitsumkehr, um die Abhängigkeiten jeder Schicht von bestimmten Technologien vollständig umzukehren. Nachteile: Die Abhängigkeitsumkehr wird in einer Einzelprojektlösung zu häufig angewendet, führt jedoch in einer .NET-Mehrprojektlösung zu bidirektionalen Abhängigkeiten in Form von Namespaces. Als Implementierungsschicht hat die Infrastrukturschicht grundsätzlich keinen Wiederverwendungswert. Ein besserer Ansatz besteht darin, die Positionen der Benutzeroberflächenschicht und der Infrastrukturschicht im Diagramm zu vertauschen.
Sie können bei Bedarf entsprechende gemeinsame Ebenen zum obigen Bild hinzufügen.
4. Architekturtrends:
(1) Nehmen Sie die Geschäftslogik als Kern und schenken Sie der Geschäftslogik mehr Aufmerksamkeit.
(2) Teilen Sie die spezifischen Abhängigkeiten der Geschäftslogikschicht für eine einheitliche Verwaltung in eine Ebene auf.
(3) Achten Sie mehr auf die Reduzierung von Abhängigkeiten innerhalb von Lösungen als auf die Wiederverwendung von Code zwischen Lösungen.
(4) Die Trennung der Freigabeschicht und der Implementierungsschicht wird zunehmend reflektiert. Zum Beispiel Zwiebelarchitektur.
Referenz
1.Muster der Unternehmensanwendungsarchitektur [Muster der Unternehmensanwendungsarchitektur]
2.Domänengesteuertes Design [Domänengesteuertes Design: Wie man mit der Kernkomplexität von Software umgeht ]
3.Anwendung von domänengesteuertem Design und Mustern【Domänengesteuertes Design und Musterpraxis】
4.Implementierung von domänengesteuertem Design【Implementierung von domänengesteuertem Design】
5.Leitfaden zur Microsoft-Anwendungsarchitektur【Microsoft Leitfaden zur Anwendungsarchitektur (Nr. 2. Auflage)】
6.Professional Enterprise .NET [Kompetent in der Entwicklung von .NET-Unternehmensprojekten: die neuesten Muster, Tools und Methoden]
7.Professional ASP.NET Design Patterns [ASP. NET-Entwurfsmuster]