Was ist Domain Driven Design (DDD)? [geschlossen]

276

Ich sehe immer wieder, dass DDD (Domain Driven Design) häufig in Artikeln verwendet wird. Ich habe den Wikipedia-Eintrag über DDD gelesen, kann aber immer noch nicht herausfinden, was es tatsächlich ist und wie ich es beim Erstellen meiner Websites implementieren würde.

leen3o
quelle

Antworten:

595

Erstens, wenn Sie nicht wissen, dass Sie es brauchen, ist es möglich, dass Sie es nicht brauchen. Wenn Sie die Probleme, die DDD löst, nicht erkennen, haben Sie diese Probleme möglicherweise nicht. Selbst DDD-Befürworter werden häufig darauf hinweisen, dass DDD nur für große Projekte (> 6 Monate) vorgesehen ist.

Angenommen, Sie lesen zu diesem Zeitpunkt noch, dann sehe ich DDD folgendermaßen:

Bei DDD geht es darum, Ihre Software zu einem Modell eines realen Systems oder Prozesses zu machen. Bei der Verwendung von DDD sollten Sie eng mit einem Domain-Experten zusammenarbeiten , der Ihnen erklären kann, wie das reale System funktioniert. Wenn Sie beispielsweise ein System entwickeln, das die Platzierung von Wetten auf Pferderennen übernimmt, ist Ihr Domain-Experte möglicherweise ein erfahrener Buchmacher.

Zwischen Ihnen und dem Domain-Experten erstellen Sie eine allgegenwärtige Sprache (UL), die im Grunde eine konzeptionelle Beschreibung des Systems darstellt. Die Idee ist, dass Sie in der Lage sein sollten, die Funktionsweise des Systems so aufzuschreiben, dass der Domänenexperte sie lesen und überprüfen kann, ob sie korrekt ist. In unserem Wettbeispiel würde die allgegenwärtige Sprache die Definition von Wörtern wie "Rasse", "Wette", "Gewinnchancen" usw. enthalten.

Die von der UL beschriebenen Konzepte bilden die Grundlage für Ihr objektorientiertes Design. DDD bietet eine klare Anleitung zur Interaktion Ihrer Objekte und hilft Ihnen, Ihre Objekte in die folgenden Kategorien zu unterteilen:

  • Wertobjekte, die einen Wert darstellen, der möglicherweise Unterteile enthält (z. B. kann ein Datum einen Tag, einen Monat und ein Jahr haben).
  • Entitäten, die Objekte mit Identität sind . Zum Beispiel hat jedes Kundenobjekt seine eigene Identität, sodass wir wissen, dass zwei Kunden mit demselben Namen nicht derselbe Kunde sind
  • Aggregierte Wurzeln sind Objekte, die andere Objekte besitzen. Dies ist ein komplexes Konzept und basiert auf der Annahme, dass einige Objekte nur dann sinnvoll sind, wenn sie einen Eigentümer haben. Zum Beispiel ist ein 'Order Line'-Objekt ohne eine' Order 'nicht sinnvoll. Wir sagen also, dass die Order die aggregierte Wurzel ist und Order Line-Objekte nur über Methoden im Order-Objekt bearbeitet werden können

DDD empfiehlt auch mehrere Muster:

  • Repository , ein Muster für die Persistenz (Speichern und Laden Ihrer Daten, normalerweise in / aus einer Datenbank)
  • Factory , ein Muster für die Objekterstellung
  • Service, ein Muster zum Erstellen von Objekten, die Ihre Hauptdomänenobjekte manipulieren, ohne selbst Teil der Domäne zu sein

An dieser Stelle muss ich sagen, dass Sie, wenn Sie noch nichts davon gehört haben, nicht versuchen sollten, DDD für ein Projekt zu verwenden, für das Sie eine Frist haben. Bevor Sie DDD versuchen, sollten Sie mit Entwurfsmustern und Unternehmensentwurfsmustern vertraut sein . Wenn Sie diese kennen, ist DDD viel einfacher zu erfassen. Und wie oben erwähnt, gibt es eine kostenlose Einführung in DDD bei InfoQ (wo Sie auch Vorträge über DDD finden können).

Rob Knight
quelle
33
Wow ... Was für eine großartige Antwort! Sehr geschätzt und die beste Erklärung, die ich je gelesen habe. Danke. Ich werde das Buch morgen herunterladen.
leen3o
3
"Aggregierte Wurzeln sind Objekte, die andere Objekte besitzen. Dies ist ein komplexes Konzept und basiert auf der Tatsache, dass es einige Objekte gibt, die nur dann sinnvoll sind, wenn sie einen Eigentümer haben." Ich denke, es könnte hier ein Missverständnis sein, die Idee, die Sie erwähnen ist "Gesamtwert", während sich Aggregate mehr mit Transaktionsgrenzen befasst, bei denen alle geschäftsinvarianten Regeln hier durchgesetzt werden müssen.
Super1ha1
6
Um ehrlich zu sein, klingt dies wie so ziemlich jedes Projekt, bei dem Entwickler mehr als einen Monat lang mit Architekten zusammenarbeiten. (Nun, zumindest nach meiner Erfahrung.) Welche Erkenntnis lässt mich Ihre Antwort noch mehr schätzen. :)
Jaroslav Záruba
4
Ich bin mit der Aussage nicht einverstanden, dass DDD "nur für große Projekte gedacht ist". DDD ist nichts, was Sie entweder vollständig oder gar nicht tun müssen. Sie können nur einige Übungen von DDD ausführen. Zum Beispiel können Sie einfach "Wertobjekte" und "allgegenwärtige Sprache" ausführen und keine aggregierten Wurzeln in einem kleinen Projekt erstellen.
EasterBunnyBugSmasher
6
Übrigens führen wir nicht für jedes Projekt oder Modell eine Domänenanalyse durch. Haben wir nicht schon nie endende Gespräche als BA mit Kunden und KMU, um die Projektdomäne und den Projektumfang zu verstehen? Ich verstehe immer noch nicht, was in DDD außerordentlich herausragend ist als in jedem anderen Softwareentwicklungsprojekt?
Supernova
50

Nehmen Sie als Beispiel StackOverflow. Anstatt mit dem Entwerfen einiger Webformulare zu beginnen, konzentrieren Sie sich zunächst auf die objektorientierte Modellierung der Entitäten in Ihrer Problemdomäne, z. B. Benutzer, Fragen, Antworten, Abstimmungen, Kommentare usw. Da das Design von den Details des Problems abhängt Domain heißt domänengesteuertes Design .

Sie können mehr in Eric Evans 'Buch lesen .

Matt Howells
quelle
5
Es gibt eine kostenlose Kurzversion von Eric Evans 'Buch .
Troelskn
Das Problem ist, dass Sie jemanden brauchen, der die Domain so abstrakt versteht, dass er etwas Nützliches sagen kann, bevor er die Webseiten benutzt! Wenn dies der Fall ist, großartig!
Ian Ringrose
3
Aber wer würde anfangen, das Formular ehrlich zu entwerfen? Jeder seriöse akademische Kurs würde Analyse-, Design- und Modellierungsanwendungen gemäß den Geschäftsanforderungen durchlaufen. Ich verstehe einfach nicht, was mit dieser Technik neu ist.
Sebas
6
Auch ich, dies ist einfach ein objektorientiertes Design, das von allen verwendet wurde, noch bevor dieses Konzept kam. Ich sehe hier keine neue Erfindung.
Ronen Festinger
2
@RonenFestinger Bitte beurteilen Sie DDD nicht nur nach dieser Antwort. Das Buch von Eric Evans enthält viele Erkenntnisse. Zum Beispiel begrenzte Kontexte. Das Bounded Context-Paradigma ist eine der Säulen der Mikrodienste, die wir heute aufbauen. Das Lesen des Buches hilft Ihnen auch beim Verständnis von Microservices.
Kerem Baydoğan