Wie macht das Sinn?
Kurze Antwort: nicht .
Längere Antwort: Die Schwergewichtsmuster für die Entwicklung eines Domänenmodells gelten nicht für die Teile Ihrer Lösung, die nur eine Datenbank sind.
Udi Dahan hatte eine interessante Beobachtung , die helfen könnte, dies zu klären
Dahan ist der Ansicht, dass ein Dienst sowohl über Funktionen als auch über Daten verfügen muss. Wenn es keine Daten hat, ist es nur eine Funktion. Wenn nur CRUD-Operationen an Daten ausgeführt werden, handelt es sich um eine Datenbank.
Der Zweck des Domänenmodells besteht schließlich darin, sicherzustellen, dass alle Aktualisierungen der Daten die aktuelle Geschäftsinvariante beibehalten. Oder anders ausgedrückt: Das Domänenmodell ist dafür verantwortlich, dass die Datenbank, die als Aufzeichnungssystem fungiert, korrekt ist.
Wenn Sie mit einem CRUD-System arbeiten, sind Sie normalerweise nicht das Aufzeichnungssystem für die Daten. Die reale Welt ist das Buch der Aufzeichnungen, und Ihre Datenbank ist nur eine lokal zwischengespeicherte Darstellung der realen Welt.
Zum Beispiel haben die meisten Informationen, die in einem Benutzerprofil angezeigt werden, wie eine E-Mail-Adresse oder eine von der Regierung herausgegebene Identifikationsnummer, eine Wahrheitsquelle, die außerhalb Ihres Unternehmens liegt - es ist der E - Mail-Administrator eines anderen, der E-Mail-Adressen zuweist und widerruft, nicht Ihre App. Es ist die Regierung, die SSNs zuweist, nicht Ihre App.
Daher werden Sie normalerweise keine Domain-Validierung für die Daten durchführen, die von außen zu Ihnen kommen. Möglicherweise sind Überprüfungen vorhanden, um sicherzustellen, dass die Daten gut geformt und ordnungsgemäß bereinigt sind . Aber es sind nicht Ihre Daten - Ihr Domain-Modell erhält kein Veto.
Bei einem DDD-Ansatz unter Verwendung von Schichten scheinen CRUD-Operationen die Domänenschicht zu durchlaufen. aber zumindest in unserem Fall scheint dies keinen Sinn zu ergeben.
Das ist richtig für den Fall, dass die Datenbank das Buch der Aufzeichnung ist .
Ouarzy drückte es so aus .
Bei der Arbeit mit viel Legacy-Code beobachte ich jedoch häufige Fehler, um festzustellen, was sich innerhalb der Domäne befindet und was sich außerhalb befindet.
Eine Anwendung kann nur dann als CRUD betrachtet werden, wenn das Datenmodell keine Geschäftslogik enthält. Selbst in diesem (seltenen) Fall ist Ihr Datenmodell nicht Ihr Domänenmodell. Dies bedeutet lediglich, dass wir keine Abstraktion benötigen, um diese zu verwalten, da keine Geschäftslogik beteiligt ist, und daher kein Domänenmodell haben.
Wir verwenden das Domänenmodell, um die Daten zu verwalten, die zur Domäne gehören. Die Daten von außerhalb der Domain werden bereits an einem anderen Ort verwaltet - wir speichern nur eine Kopie zwischen.
Greg Young verwendet Lagersysteme als primäres Beispiel für Lösungen, bei denen sich das Buch der Aufzeichnung an einem anderen Ort befindet (dh in der Lagerhalle). Die Implementierung, die er beschreibt, ist Ihrer sehr ähnlich - eine logische Datenbank zum Erfassen von Nachrichten, die vom Warehouse empfangen wurden, und eine separate logische Datenbank, in der die aus der Analyse dieser Nachrichten gezogenen Schlussfolgerungen zwischengespeichert werden.
Vielleicht haben wir hier zwei begrenzte Kontexte? Jeweils mit einem anderen Modell für eineinvestment account
Vielleicht. Ich würde es nur ungern als begrenzten Kontext kennzeichnen, da nicht klar ist, welches andere Gepäck damit einhergeht. Es kann sein, dass Sie zwei Kontexte haben, es kann ein Kontext mit subtilen Unterschieden in der allgegenwärtigen Sprache sein, die Sie noch nicht aufgegriffen haben.
Möglicher Lackmustest: Für wie viele Domain-Experten benötigen Sie zwei Domain-Experten, um dieses Spektrum abzudecken, oder nur einen, der auf unterschiedliche Weise über die Komponenten spricht. Grundsätzlich können Sie möglicherweise erraten, wie viele begrenzte Kontexte Sie haben, indem Sie das Conway-Gesetz rückwärts anwenden.
Wenn Sie der Ansicht sind, dass begrenzte Kontexte mit Diensten ausgerichtet sind, ist dies möglicherweise einfacher: Sollten Sie in der Lage sein, diese beiden Funktionen unabhängig voneinander bereitzustellen? Ja schlägt zwei begrenzte Kontexte vor; aber wenn sie synchron gehalten werden müssen, dann ist es vielleicht nur eine.