wake-up-neo.com

Zwiebelarchitektur im Vergleich zu Sechseck

Gibt es einen Unterschied zwischen ihnen (Zwiebel | Sechseck), sind sie meines Erachtens genau gleich, sie konzentrieren sich auf die Domäne, die den Kern der Anwendung bildet, und sollten Technologie-/Framework-Agnostiker sein. 

Was sind die Unterschiede zwischen ihnen?

Ich sehe auch keinen wirklichen Vorteil, wenn man eine über der anderen oder sogar gegen eine N-Layer-Architektur einsetzt, wenn man es nicht macht, wenn man nur einer von ihnen folgt, wird dies keinen Unterschied machen

Was sind die Vorteile der Verwendung von einem über dem anderen und warum würden Sie es verwenden? wann es zu benutzen?

Vielen Dank

5
MCR

Was sind die Unterschiede zwischen ihnen?

Onion: Es gibt Ebenen, deren Abhängigkeiten immer nach innen zeigen, d. H. Eine Ebene kann jede der darin enthaltenen Ebenen verwenden. Die innere Schicht ist Domänenmodell und die äußere ist Infrastrukturstruktur, die Anzahl der Schichten kann jedoch variieren.

Hexagonal (alternativer Name für den ursprünglichen Namen "Ports & Adapter"): Es gibt keine Layer. Sie haben die Anwendung, die Ports und die Adapter. Die Ports gehören zur Anwendung, sie sind die API/SPI der Anwendung. Adapter befinden sich außerhalb der Anwendung und jeder hängt von einem Port der Anwendung ab.

Die meisten Leute haben das Problem, dass bei der Implementierung einer hexagonalen Architektur die meisten Menschen nicht jeden Adapter physisch in ein Artefakt einfügen, sondern alle zu einem Artefakt zusammenfassen (wie die Infrastrukturschicht). Und sie machen auch die Adapter von der gesamten App abhängig, nicht nur von dem verwendeten Port. Es wäre also tatsächlich eine Zwiebel.

Bei der Implementierung eines sechseckigen Rechts sollten die Adapter voneinander getrennt werden, und jeder Adapter sollte nur von dem Port abhängen, den er verwendet/implementiert (abhängig davon, ob der Port ein Treiber oder ein Treiber ist).

Ein weiterer Unterschied ist, dass Hexagonal nichts über die Struktur des Inneren des Sechsecks (der Anwendung) aussagt.

Was sind die Vorteile, wenn man eins gegenüber dem anderen verwendet?

Der Vorteil von Hexagonal ist, dass es modularer ist, Sie haben eine klare Trennung der Komponenten und verhindern, dass Code zwischen ihnen austritt. Onion hingegen ist in diesem Sinne gefährlicher, da Sie beispielsweise direkt von der Benutzeroberfläche aus auf die Datenbank zugreifen können (beide gehören zu derselben Ebene).

Der Nutzen von Zwiebel ergibt sich aus dem Vorstehenden. Da Sechsecke viele Artefakte haben, sollte der Aufbau des gesamten Projekts viel Zeit in Anspruch nehmen, wenn das Projekt groß ist.

Warum würdest du es benutzen? wann es zu benutzen?

Bei der Verwendung dieser beiden Optionen konzentrieren Sie sich auf das eigentliche Problem, das Sie lösen möchten, ohne Technologie oder Framework zu verwenden. Die Anwendung ist technologieunabhängig und es ist leicht, von einem Framework zu einem anderen zu migrieren. Beide werden deshalb "saubere" Architekturen genannt. Sie haben Ihren Anwendungskern frei von Framework-Code, Anmerkungen usw. 

Also ... warum sie benutzen?

Weil Sie die Wartbarkeit, die Testbarkeit verbessern und über sauberen Code verfügen.

Wann sie zu benutzen?

Ich sollte lieber sagen, wenn ich sie nicht benutzen soll. Wenn die von Ihnen entwickelte App nicht komplex ist, zum Beispiel nur eine CRUD, ist es vielleicht nicht wert, sie zu verwenden.

Ich persönlich mag "Ports und Adapter" gegenüber den anderen.

Hoffe, meine Exaplanation hat geholfen.

12
choquero70

Frühere Antworten geben eine grundlegend falsche Aussage über die Onion-Architektur ab. Sie behaupten, dass "in Onion die Benutzeroberfläche und der Datenzugriff Teil derselben Ebene sind". Die Verwirrung könnte durch den Gedanken entstehen, dass alle Ebenen mit allem darüber und darunter sprechen.

In Wirklichkeit ist ein Zwiebeldiagramm eine schlechte Darstellung der Zwiebelarchitektur. Der Schlüssel zum Erfolg ist, dass die Kerndomänenschicht von allen umgebenden Schichten unabhängig ist und die umgebenden Schichten typischerweise auch voneinander unabhängig sind. In der Regel bedeutet dies, dass eine Benutzeroberfläche mit einem Dienst kommuniziert, der mit Daten- und Domänenschichten kommuniziert. Die Benutzeroberfläche interagiert nicht direkt mit den anderen Ebenen, und die Ebeneninteraktionen werden mithilfe von Abhängigkeitsinjektion und Schnittstellensegregation abstrahiert.

Meines Wissens gibt es keine Architekturmuster, die das Mischen von Datenzugriff und Benutzeroberfläche empfehlen (einige, z. B. Active Record , mischen von Geschäfts- und Datenzugriff). Separat gibt es Technologien, die Code erzeugen, der Ebenen vermeidet - Tools für die schnelle Entwicklung tun dies häufig, aber diese Tools begünstigen die Geschwindigkeit der Bereitstellung im Vergleich zu Design und Wartbarkeit.

Onion, Hexagonal sowie Ports und Adapter sind unterschiedliche Namen für dieselbe konzeptionelle Architektur.

Mark Seeman hat einen großartigen Beitrag verfasst, der verdeutlicht, wie geringfügig und semantisch die Unterschiede sind: Ebenen, Zwiebeln, Ports, Adapter: alles gleich

3
STW

Es gibt einen Unterschied zwischen der geschichteten Architektur und der Zwiebelfamilie. Die mehrschichtige Architektur arbeitet mit einer hierarchischen Beziehung zwischen der Benutzeroberfläche und den Datenzugriffsschichten. Im Gegensatz dazu betrachtet die Zwiebelarchitektur die Benutzeroberfläche und den Datenzugriff als Teil derselben Schicht.

Wie kommt es, dass sich Benutzeroberfläche und Datenzugriff auf derselben Ebene befinden? Im Kern der Zwiebelarchitektur liegt die Domäne mit ihrer Geschäftslogik. Dies ist der Hauptfokus. Die Domain befindet sich nicht über oder unter einer anderen Ebene. Es ist das Zentrum. Benutzeroberflächen, Rest-Endpunkte und dergleichen sind ebenso wie Daten-Repositorys sekundär zur Domäne.

Die Ports and Adapters-Architektur (ein anderer Name für die hexagonale Architektur) verdeutlicht dies durch ihren Namen: Es gibt eine beliebige Anzahl von Ports, die als Schnittstellen zwischen der Domäne und der Umgebung fungieren. Adapter implementieren die Ports, sodass die Ports mit der Domäne interagieren können.

0
Markus Pscheidt