[JAVA] Was ist der Unterschied zwischen den Verantwortlichkeiten der Domänenschicht und der Anwendungsschicht in der Zwiebelarchitektur [DDD]?

Serienartikel: Domain-gesteuerte Designkommentarserie

Was ist die einfachste Architektur, um mit dem domänengesteuerten Design-Little-Hands-Labor zu beginnen
Übersicht über die domänengetriebene + Zwiebelarchitektur - Labor für kleine Hände
Wie ich in diesen Artikeln schrieb, bin ich DDD Wir verwenden den Begriff Zwiebelarchitektur, wenn wir uns für die Schichtarchitektur von entscheiden. Ich habe es bisher verschiedenen Leuten erklärt, und ich habe über Ebenenverantwortlichkeiten als einen Punkt gesprochen, der es leicht macht, im Verständnis stecken zu bleiben, also werde ich das erklären.

Definition, die auf einen Schlag schwer zu vermitteln ist (glaube ich)

Onion Architecture Is Interesting - DZone Java

Beschreibung jeder in diesem Artikel geschriebenen Ebene

japanische Übersetzung

Ich habe es bisher verschiedenen Leuten erklärt, aber in vielen Fällen konnte ich es mit der obigen Erklärung nicht richtig machen. Besonders wenn ich *** anwendungsspezifische Logik *** sage, ist das Wort "Anwendung" mehrdeutig, so dass die Leute es anders erhalten und es nicht gut zu passen scheint.

Daher habe ich mich kürzlich auf das Thema Verantwortlichkeiten konzentriert und versucht, Folgendes zu erklären.

Verantwortungsorientierte Definition

Es mag ein wenig irreführend oder gegenläufig sein zu sagen, dass die Verantwortung der Domänenschicht "Datenintegrität" ist, aber ich wage es, dies mit einem Schwerpunkt auf einfacher Kommunikation zu sagen.

Ich werde unten ausführlich erklären.

Domänenschicht

Was bedeutet es, auf dieser Ebene "Datenintegrität sicherzustellen"?

Ein konkretes Codebeispiel finden Sie im Artikel Was drückt Domänenwissen in einem Modell aus. Wir möchten jedoch "nur Methoden verfügbar machen, die die Konsistenz mit den oberen Ebenen gewährleisten können (Sichtbarkeit nicht öffentlich machen).

Im Beispiel des obigen Artikels lautet die Regel der Datenintegrität: "Eine Aufgabe kann nur dreimal an einem Tag verschoben werden." Um dies zu gewährleisten, müssen Kontrollen wie "Aufzeichnen der Anzahl der Verschiebungen beim Verschieben einer Aufgabe" und "Überprüfen der Anzahl der Verschiebungen vor dem Verschieben und Fehler machen, wenn sie das Dreifache überschreiten" durchgeführt werden.

Eine Methode, die dies nicht garantiert, ist etwa "Sie können das Fälligkeitsdatum frei ändern, ohne die Anzahl der Aufgabenverschiebungen zu berücksichtigen". Dies ist genau das, dem alle Setter in der öffentlichen Einstellung ausgesetzt sind, wie z. B. die ActiveRecord-Musterobjekte.

Indem wir nur die Methoden veröffentlichen, die korrekt gesteuert werden können, streben wir einen Zustand an, in dem "die Integrität der Daten nicht beeinträchtigt werden kann, egal wie hart die obere Schicht arbeitet".

Anwendungsschicht (Anwendungsfallschicht)

Ich schrieb, dass die Verantwortung dieser Schicht darin besteht, "die von der Domänenschicht bereitgestellten Methoden zu kombinieren und einen Anwendungsfall zusammenzustellen".

Wie unterscheidet sich dies von den Verantwortlichkeiten der Domänenschicht?

Nehmen wir als weiteres Beispiel an, die Domänenschicht stellt eine "Methode zum Ändern der Adresse eines Benutzers" und eine "Methode zum Ändern einer festen Telefonnummer" als unabhängige öffentliche Methoden bereit.

Dies bedeutet, dass die Domänenschicht "die unabhängige Aktualisierung der Adresse und der festen Telefonnummer aus Gründen der Datenintegrität ermöglicht".

Andererseits können in der Anwendungsschicht die folgenden Anwendungsfälle durch Kombinieren der obigen Verfahren realisiert werden.

Ob der Aktualisierungsvorgang unabhängig oder gleichzeitig ausgeführt werden soll, kann in der Anwendungsschicht je nach dem zu realisierenden Anwendungsfall frei kombiniert werden.

Wenn die Domänenschicht hingegen sagt: "Aus Gründen der Datenintegrität können Adressen und feste Telefonnummern nur gleichzeitig aktualisiert werden", muss die Anwendungsschicht die Anforderungen erfüllen.

Anwendungsfälle (insbesondere in Ihren eigenen Webanwendungen) können sich je nach Strategie in einem kurzen Zyklus ändern. Aber wird sich die Integrität der Daten entsprechend ändern? Die Antwort wäre nein. Indem Sie Elemente mit unterschiedlichen Lebenszyklen in jeder Schicht einschränken, können Sie das Design widerstandsfähig gegen Änderungen machen.

verdienen

Abschließend möchte ich über die Vorzüge einer solchen Überlagerung schreiben.

Zusammenfassung

Beim Entwerfen einer DDD muss immer darüber nachgedacht werden, wo dieser Prozess verantwortlich ist. Dies ist ein sehr wichtiges Konzept, das für das Layering-Design von DDD von zentraler Bedeutung ist. Bitte verwenden Sie es als Referenz beim Entwerfen.

Recommended Posts

Was ist der Unterschied zwischen den Verantwortlichkeiten der Domänenschicht und der Anwendungsschicht in der Zwiebelarchitektur [DDD]?
Was ist die Darstellung von Domänenwissen im [DDD] -Modell?
Was ist der Unterschied zwischen einem Webserver und einem Anwendungsserver?
Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??
Was ist der Unterschied zwischen Systemspezifikation und Funktionsspezifikation?
[Rails] Was ist der Unterschied zwischen Redirect und Rendering?
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
Was ist der Unterschied zwischen Überspringen und Ausstehend? [RSpec]
[Rails] Was ist der Unterschied zwischen Bundle-Installation und Bundle-Update?
Was ist der Unterschied zwischen einer Aktion und einer Instanzmethode?
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
Unterschiede zwischen Klassen und Instanzen in Ruby
Gibt es Ende 2017 einen Leistungsunterschied zwischen Oracle JDK und OpenJDK?
Verstehe in 3 Minuten! Eine sehr grobe Erklärung des Unterschieds zwischen Sitzung und Cookie
[DDD] Was ist die am besten zugängliche Architektur, um mit domänengesteuertem Design zu beginnen?
[Docker-compose] Unterschied zwischen env_file und Umgebung. Informationen zur Priorität der Anwendung von Umgebungsvariablen
Ich werde den Unterschied zwischen der Entwicklung von Android-Anwendungen und der Entwicklung von iOS-Anwendungen aus der Sicht von iOS-Ingenieuren erläutern
Jetzt im dritten Jahr ist das Missverständnis, das ich bemerkt habe, der Unterschied zwischen der Gleichheitsmethode und ==
Ist die Kurzschlussauswertung wirklich schnell? Unterschied zwischen && und & in Java
Geben Sie die Differenz zwischen jedem Feld zweier Objekte in Java aus
Was ist @Override oder @SuppressWarnings ("SleepWhileInLoop") vor der Funktion? ?? ??
Unterschied zwischen UI-Beschriftung durch Char Wrapping und Word Wrapping in der japanischen Anzeige
[DDD] Übersicht über die domänengetriebene + Zwiebelarchitektur
'% 02d' Was ist der% von% 2?
Webanwendungsstruktur nach Java und Verarbeitungsablauf in der Präsentationsschicht
Der Inhalt des Rückgabewerts von executeBatch unterscheidet sich zwischen 11g und 12c
Verstehen Sie den Unterschied zwischen int und Integer und BigInteger in Java und float und double
Die Anwendung absorbiert den Unterschied im Zeichencode
Unterschied zwischen final und Immutable in Java
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Unterschied zwischen pop () und peek () im Stapel
Unterschied zwischen isEmpty und isBlank von StringUtils
Was ist die Hauptmethode in Java?
Wie ist die Datenstruktur von ActionText?
Unterschied zwischen getText () und getAttribute () von Selen
Über den Unterschied zwischen irb und pry
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
Unterschied zwischen EMPTY_ELEMENTDATA und DEFAULTCAPACITY_EMPTY_ELEMENTDATA in ArrayList
Unterschied zwischen int und Integer in Java
Ich habe versucht, eine Webanwendung zu erstellen, die Tweets mit einer Vue-Word-Cloud durchsucht und die Tendenz untersucht, was im zugehörigen Profil geschrieben steht
[Java] Unterschied zwischen gleich und == in einer Zeichenfolge, die ein Referenztyp ist
Ich habe die Daten der Reise (Tagebuchanwendung) in Java erhalten und versucht, sie # 001 zu visualisieren
Rufen Sie den ersten Wochentag im aktuellen Gebietsschema ab (welcher Tag ist heute?)
[Java] Verstehe den Unterschied zwischen List und Set
[iOS] Verstehe den Unterschied zwischen Frame und Grenzen
[Rails / Active Record] Über den Unterschied zwischen create und create!
Unterschied zwischen next () und nextLine () in Java Scanner
Verstehe den Unterschied zwischen abstrakten Klassen und Schnittstellen!
Unterschied zwischen Mitglied und Sammlung von Schienen route.rb
Was sind die Vorteile von DI und Thymeleaf?