Die Zwiebelarchitektur: Teil 1 Programmierung mit Palermo
Es passt gut für Microservices, wobei die Datenzugriffsschicht nicht nur Datenbank, sondern auch einen HTTP -Client umfasst, um Daten von einem anderen Microservice oder sogar von einem externen System zu erhalten. Die Zwiebelarchitektur löste dieses Problem, indem sie Schichten vom Kern zur Infrastruktur definiert. Es wendet die grundlegende Regel an, indem sie die gesamte Kopplung in Richtung des Zentrums bewegt.
Fügen Sie im Ordner v1 einen neuen leeren API -Controller namens ProductController hinzu. Verwenden Sie diesen Ansatz. Wir können alle reichhaltigen Geschäftslogik in den Domänen- und Serviceschichten zusammenfassen, ohne jemals irgendwelche Implementierungsdetails kennen zu müssen. Unveränderliche Objekte, die den Missbrauch der API verhindern, den Zugriff auf Domänen zu erhalten. In diesem Artikel werden wir einen Ansatz kennenlernen, mit dem wir mithilfe der neuesten Bibliotheken und Konzepte eine superschnelle Repository-Implementierung erstellen werden. variieren, aber Domain ist immer bei Das Zentrum. Sehen Sie die Schönheit der losen Kupplung, die mit dieser Architektur erreicht wird.
C# Programmierer werden aufgrund der Abhängigkeitsströme in die Zwiebelarchitektur gezogen. Wenn Sie mehr C# lernen möchten, während Sie mit der Onion -Architektur arbeiten, besuchen Sie die TechRepublic Academy. Das Grundprinzip der Zwiebelarchitektur besteht darin, den Grenzen dieser Schichten zu folgen -die innere Schicht kann nicht von ihrer äußeren Schicht abhängen, sondern kann von Schichten darunter abhängen. Beispielsweise kann die Domänenschicht nicht von der Infrastrukturschicht abhängen, aber die Infrastrukturschicht kann von der Domänenschicht abhängen. Stellen Sie sich vor, Sie setzen die SaveObjectTodatabase -Methode in das Domänenobjekt ein, dann sind Sie auf die Infrastrukturschicht angewiesen, die eine Verletzung der Zwiebelarchitektur darstellt.
UI-Schicht
Die Zwiebelarchitektur wurde erstmals von Jeffrey Palermo eingeführt, um die Probleme des traditionellen Ansatzes von N-Layered Architecture zu überwinden. Lassen Sie uns verschiedene Schichten von verstehen Die Architektur und ihre Verantwortlichkeiten mit einem Anwendungsfall der Auftragserstellung. Eine geringe Kopplung, bei der ein Modul mit einem anderen Modul interagiert und sich nicht mit den Interna des anderen Moduls befassen muss. Alle internen Schichten müssen sich nicht über die interne Umsetzung externer Schichten befassen.
Die in der Domänenschicht definierten Entitäten werden die Informationen erfassen, die für die Beschreibung der Problemdomäne wichtig sind. Lassen Sie uns einen Blick auf die Vorteile der Zwiebelarchitektur werfen und warum wir es in unseren Projekten umsetzen möchten. Die Zwiebelarchitektur ist auch allgemein als “saubere Architektur” oder “Ports und Adapter” bekannt. Diese architektonischen Ansätze sind nur Variationen desselben Themas. In diesem Artikel lernen wir etwas über Zwiebelarchitektur und was ihre Vorteile kennenlernen. Wir werden eine erholsame API erstellen, die der Zwiebelarchitektur mit ASP.NET CORE und .NET 5 folgt.
Generieren Sie die Migrationen und die Datenbank
die
Die Infrastruktur verfügt
hängt sowohl von der Domäne als auch von der Anwendung ab. Es gibt natürlich nichts, was Sie daran hindert, zusätzliche Abhängigkeiten zu deklarieren.
Sag Lombok. Das Wichtigste, was hier zu beachten ist, ist, dass es bei diesem Build -Setup nicht möglich ist, das umzukehren
Reihenfolge der Abhängigkeiten zwischen den Schichten. Mit anderen Worten, wenn Ihre Anwendung über mehrere Codezeilen in Ereignissen Button_Submit oder Page_Load verfügt und wenn sie mehrere Dinge in einer einzelnen Methode erledigt, dann ist dies eine Frage der Besorgnis. Denn früher oder später wird sich das System ändern und neue Entwickler werden diesen vorhandenen Ereignissen immer wieder neue Geschäftslogik hinzufügen, und die eventuelle Situation wäre sehr chaotisch.
So versuchen verschiedene Designansätze, ähnliche Ziele zu erreichen. Wenn wir darüber nachdenken Software-Architekturdesign, insbesondere in der objektorientierten Welt, sind die drei am meisten gesprochenen Muster saubere Architektur, hexagonale Architektur und Zwiebelarchitektur. Datenbankunabhängig – Da wir eine saubere Trennung des Datenzugriffs haben, ist es recht einfach, zwischen verschiedenen Datenbankanbietern zu wechseln. Dies ist ein leerer API -Controller, bei dem die API -Versioning im Attribut und auch ein Mediamed -Objekt aktiviert ist. Wir müssen die API-Versionsroute oder das Mediatorobjekt nicht neu definieren.
Implementierung der Zwiebelarchitektur
Basierend auf dem DDD -Modell haben wir Zwiebelarchitektur (auch bekannt als hexagonal oder saubere Architektur) erstellt. Im Projekt von Services.AbStractions finden Sie die Definitionen für die Service -Schnittstellen, die die Hauptgeschäftslogik zusammenfassen. Außerdem verwenden wir das Contracts -Projekt, um die Datenübertragungsobjekte (DTO) zu definieren, mit denen wir konsumieren werden Die Service -Schnittstellen. Zwiebelarchitektur mag am Anfang schwer erscheinen, ist aber in der Branche weithin akzeptiert.
am Rande würden wir eine Klasse finden, die eine Repository -Schnittstelle implementiert. Diese Klasse ist mit einer bestimmten Methode des Datenzugriffs verbunden, und deshalb liegt sie außerhalb des Anwendungskerns. Diese Klasse implementiert die Repository -Schnittstelle und ist dadurch damit verbunden. Jede Ebene/Kreis verkapelt oder verbirgt interne Implementierungsdetails und setzt eine Schnittstelle zur äußeren Ebene auf. Alle Schichten müssen auch Informationen bereitstellen, die von inneren Schichten bequem konsumiert werden.