[JAVA] [DDD] Was ist die am besten zugängliche Architektur, um mit domänengesteuertem Design zu beginnen?

DDD serialisierter Artikel

Hintergrund / Prämisse

In dem Artikel Warum DDD-Anfänger sofort krank werden, nachdem sie wütend geworden sind

In der Literatur im Internet werden verschiedene Architekturen vorgestellt. Hexagonale Architektur wurde in IDDD erwähnt, aber es gibt berühmte Varianten wie Zwiebelarchitektur und saubere Architektur, die daraus entstanden sind. Dies führt zu großer Verwirrung bei der Implementierung. Sie werden Zeit damit verbringen, den Kontext zu verstehen und die zu übernehmende Architektur auszuwählen.

Ich schrieb. Hier ist eine Architektur, die ich als die "am besten zugängliche" betrachte.

Als Prämisse ist *** eine persönliche Meinung ***, die ausschließlich auf persönlichen Erfahrungen basiert.

In der DDD-Theorie gilt in Bezug auf die Architektur Eric Evans 'domänengesteuertes Design <img src =" // ir-jp.amazon-adsystem.com/e/ir?t=majackyy-22&l= = 9 & a = 4798121967 "width =" 1 "height =" 1 "border =" 0 "alt =" "style =" border: keine! Wichtig; Rand: 0px! Wichtig; "/> (der Originaltext unten) und <ein Ziel = "_ blank" href = "https://www.amazon.co.jp/gp/product/479813161X/ref=as_li_tl? Laufwerksdesign (objektorientierte AUSWAHL) (im Folgenden IDDD) und verschiedene werden eingeführt, und es wird gesagt, dass dies die einzig richtige Antwort ist. Nichts wird präsentiert. Die Architektur liegt im Ermessen jedes Projekts, und die Eignung hängt von den Projektanforderungen und den Mitgliedern ab.

Ich denke jedoch, dass ich mich fragen werde, wie ich anfangen soll, wenn ich anfange, also werde ich vorschlagen * "Wenn ein Anfänger das kann, ist das gut" *. Bitte beachten Sie.

Kandidatenarchitekturen und ihre Beziehungen

Wenn Sie DDD-Artikel online abrufen, finden Sie Folgendes.

  1. Schichtarchitektur

  2. Sechseckige Architektur

  3. Saubere Architektur

Lassen Sie mich einen kurzen Überblick darüber geben.

Schichtarchitektur

Layered.png

Die im Originaltext eingeführte Architektur. Im Vergleich zur herkömmlichen dreischichtigen Architektur besteht die Idee darin, dort eine Domänenschicht und eine aggregierte Domänenlogik einzurichten.

Sechseckige Architektur

Hexagonal.png

Die in IDDD eingeführte Architektur. Auch als "Port- und Adapterarchitektur" bekannt. Es wurde ursprünglich 2005 von [diesem Blog] vorgeschlagen (http://alistair.cockburn.us/Hexagonal+architecture).

In der Tat sind "hexagonal, Zwiebel, sauber" im Wesentlichen gleich.

Die Idee ist, dass es mit diesem Sechseck abgeschlossen ist. Es ist nur so, dass die Art und Weise, wie die Verantwortlichkeiten getrennt sind und der Name etwas anders ist. Ist es dann nicht in Ordnung mit Sechseck?

Ja, es ist im Grunde genommen sechseckig und hat daher das gleiche Design.

Jedoch ...

*** Erscheint das Implementierungsimage nicht, selbst wenn Sie sich diese Abbildung ansehen? *** ***

Ich denke, das ist der Punkt, und ich frage mich, ob diese Verwirrung der Grund ist, warum Menschen, die IDDD lesen, ihre Hände nicht sofort bewegen können.

Um die Schlussfolgerung in eine seltsame Position zu bringen, *** ist meine Empfehlung Zwiebelarchitektur ***. Obwohl dies im Wesentlichen dasselbe ist, ist es aufgrund der Änderung der Aufteilung der Verantwortlichkeiten und des Namens einfacher, intuitiv zu verstehen. Ich denke, es ist besser, die erste Einführung zu machen, wenn Sie sich diese Abbildung ansehen.

Als nächstes werde ich das vorstellen.

Zwiebelarchitektur

In Anlehnung an die hexagonale Architektur wurde die Zwiebelarchitektur 2008 in diesem Blog vorgeschlagen.

Onion.png Die folgende Abbildung zeigt die gleiche Struktur flach. Onion(Flattened).png

Gibt es nicht ein Bild davon, welche Art von Struktur es sein wird? Ich werde die Details später erläutern, aber der Punkt ist, dass die Domänenschicht aufgrund des Prinzips der Abhängigkeitsumkehr *** nicht mehr von der Infrastrukturschicht abhängig ist. Dies macht das Domänenschichtmodell zu einer Implementierung, die nicht von einer bestimmten Bibliothek abhängt.

Dies ist genau die gleiche Idee in der hexagonalen Architektur, aber es ist schwierig, aus dem konzeptionellen Diagramm zu lesen. Aus diesem Grund empfehle ich die Zwiebelarchitektur, um mit der intuitiven Klarheit beim Betrachten des Diagramms zu beginnen.

Es ist eine seltsame Reihenfolge, aber ich zeige Ihnen zum Vergleich auch eine saubere Architektur.

Saubere Architektur

In Anlehnung an die Sechseck-, Zwiebel- und andere Architekturen versuchte die saubere Architektur 2013, die Konzepte zu integrieren. Es wurde in [diesem Blog] vorgeschlagen (https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html).

image.png Das Bild stammt aus demselben Blog.

Wie Sie an der Struktur sehen können, in der sich konzentrische Kreise überlappen, wird im Grunde dasselbe gesagt. Ich denke, der einzige Unterschied ist das Wort.

Es gibt einige Artikel über die Verwendung von Clean Architecture als Android-Anwendungsarchitektur unabhängig von DDD.

Ich mag das wirklich, aber es ist schwer zu verstehen, was in die Ebene "Use Case Layer" geschrieben werden soll, und die Benennung lautet "Entity Layer" anstelle von "Domain Layer" (Entity ist Teil der Domain Layer in DDD). Also passt es nicht), also bevorzuge ich die Zwiebelarchitektur.

Wenn dies gut passt, sollten Sie die saubere Architektur benennen.

Implementierung mithilfe der Architektur

Informationen zum Packen des Verhaltens in die Domänenschicht [DDD] Was ist der Ausdruck von Domänenwissen im Modell Dieser Artikel führt es mit Beispielcode ein.

Onion(Flattened).png

Die Task-Entität im Artikel entspricht DomainModel, TaskRepository entspricht DomainService und TaskApplication entspricht Application. Wenn man es so betrachtet, ist es ziemlich einfach und man kann sich leicht den Namen und den Inhalt der Ebene vorstellen.

Deshalb versuche ich, wenn ich DDD zum ersten Mal erkläre, zunächst die Zwiebelarchitektur und den Beispielcode wie oben zu erläutern.

Ich möchte in einem anderen Artikel etwas tiefer in die Zwiebelarchitektur und die Umkehrung der Abhängigkeit eintauchen.

Nachfolgender Artikel

Übersicht über die domänengetriebene + Zwiebelarchitektur Bitte schauen Sie hier.

Wenn Sie mehr wissen wollen

Wir haben ein Buch für diejenigen veröffentlicht, die zum ersten Mal DDD lernen, oder für diejenigen, die tatsächlich begonnen haben und mit Schwierigkeiten konfrontiert sind.

Handbuch zur Modellierung / Implementierung von domänengesteuertem Design

Beginnend mit einer Erklärung des "Zwecks von DDD" und des "Modells", die dazu neigen, verloren zu gehen Wir möchten die Attraktivität und die Auswirkungen von DDD anhand von Beispielen für konkrete Modellierung und sogar Implementierung erleben.

"Kapitel 5 Architektur" in diesem Buch enthält eine detailliertere Erläuterung des Inhalts dieses Artikels. Bitte kaufen Sie, wenn Sie möchten.

Auf Twitter senden wir auch Fragen zu DDD und akzeptieren Fragen über einen Dienst namens "Question Box". Bitte folgen Sie mir, wenn Sie möchten.

@little_hand_s

Recommended Posts

[DDD] Was ist die am besten zugängliche Architektur, um mit domänengesteuertem Design zu beginnen?
Was ist domänengesteuertes Design, das versucht, [DDD] zu lösen?
Was ist die Darstellung von Domänenwissen im [DDD] -Modell?
Was ist der Unterschied zwischen den Verantwortlichkeiten der Domänenschicht und der Anwendungsschicht in der Zwiebelarchitektur [DDD]?
[DDD] Übersicht über die domänengetriebene + Zwiebelarchitektur
Wie fange ich mit schlank an?
[IOS] Was tun, wenn das Bild mit einer Farbe gefüllt ist?
Ich habe versucht, mit Web Assembly zu beginnen
[Hinweis] Erste Schritte mit Rspec
Beantwortete Fragen zu DDD [Domain Driven Design]
Erste Schritte mit Eclipse Micro Profile
Rails-Anfänger haben versucht, mit RSpec zu beginnen
Erste Schritte mit Doma-Einführung in die Kriterien-API
Einführung in "Einführung in die praktische Rostprogrammierung" (Tag 3)
Beginnen Sie mit serverlosem Java mit dem leichtgewichtigen Framework Micronaut!
[Schienen] Was tun, wenn mit der Fehlermethode keine Fehlermeldung angezeigt wird?
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?