Domain Driven Design ist eine Methodik und ein Prozessrezept für die Entwicklung komplexer Systeme, deren Schwerpunkt auf der Zuordnung von Aktivitäten, Aufgaben, Ereignissen und Daten innerhalb einer Problemdomäne zu den Technologieartefakten einer Lösungsdomäne liegt.
Der Schwerpunkt von Domain Driven Design liegt auf dem Verständnis der Problemdomäne, um ein abstraktes Modell der Problemdomäne zu erstellen, das dann in einem bestimmten Satz von Technologien implementiert werden kann. Domain Driven Design als Methodik bietet Richtlinien dafür, wie diese Modellentwicklung und Technologieentwicklung zu einem System führen kann, das den Anforderungen der Benutzer entspricht und gleichzeitig robust gegenüber Veränderungen in der Problemdomäne ist.
Die Prozessseite von Domain Driven Design umfasst die Zusammenarbeit zwischen Domain-Experten, Personen, die die Problemdomäne kennen, und Design- / Architektur-Experten, Personen, die die Lösungsdomäne kennen. Die Idee ist, ein gemeinsames Modell mit gemeinsamer Sprache zu haben, damit Menschen aus diesen beiden unterschiedlichen Bereichen mit ihren zwei unterschiedlichen Perspektiven die Lösung diskutieren und tatsächlich eine gemeinsame Wissensbasis mit gemeinsamen Konzepten diskutieren.
Das Fehlen eines gemeinsamen Verständnisses der Problemdomäne zwischen den Personen, die ein bestimmtes System benötigen, und den Personen, die das System entwerfen und implementieren, scheint ein Haupthindernis für erfolgreiche Projekte zu sein. Domain Driven Design ist eine Methode, um dieses Hindernis zu beseitigen.
Es ist mehr als ein Objektmodell. Der Fokus liegt wirklich auf der gemeinsamen Kommunikation und der Verbesserung der Zusammenarbeit, damit die tatsächlichen Bedürfnisse innerhalb der Problemdomäne entdeckt und eine geeignete Lösung geschaffen werden kann, um diese Bedürfnisse zu erfüllen.
Domain-Driven Design: Das Gute und das Herausfordernde bietet mit diesem Kommentar einen kurzen Überblick:
DDD hilft dabei, die Architektur der obersten Ebene zu entdecken und über die Mechanik und Dynamik der Domäne zu informieren, die die Software replizieren muss. Konkret bedeutet dies, dass eine gut durchgeführte DDD-Analyse Missverständnisse zwischen Domänenexperten und Softwarearchitekten minimiert und die nachfolgende Anzahl teurer Änderungsanforderungen reduziert. Durch die Aufteilung der Domänenkomplexität in kleinere Kontexte vermeidet DDD, dass Projektarchitekten gezwungen werden, ein aufgeblähtes Objektmodell zu entwerfen, bei dem viel Zeit für die Erarbeitung von Implementierungsdetails verloren geht - auch weil die Anzahl der zu bearbeitenden Entitäten häufig über das hinausgeht Größe der Whiteboards im Konferenzraum.
Lesen Sie auch diesen Artikel Domain Driven Design für Services Architecture, der ein kurzes Beispiel enthält. Der Artikel enthält die folgende Miniaturbeschreibung des domänengesteuerten Designs.
Domain Driven Design befürwortet eine Modellierung basierend auf der Realität des Geschäfts als relevant für unsere Anwendungsfälle. Da es jetzt älter wird und der Hype abnimmt, vergessen viele von uns, dass der DDD-Ansatz wirklich dazu beiträgt, das vorliegende Problem zu verstehen und Software für das gemeinsame Verständnis der Lösung zu entwickeln. Beim Erstellen von Anwendungen spricht DDD von Problemen als Domänen und Subdomänen. Es beschreibt unabhängige Schritte / Problembereiche als begrenzte Kontexte, betont eine gemeinsame Sprache, um über diese Probleme zu sprechen, und fügt viele technische Konzepte wie Entitäten, Wertobjekte und aggregierte Stammregeln hinzu, um die Implementierung zu unterstützen.
Martin Fowler hat eine Reihe von Artikeln verfasst, in denen Domain Driven Design als Methodik erwähnt wird. Beispielsweise bietet dieser Artikel, BoundedContext , einen Überblick über das Konzept des begrenzten Kontexts aus der domänengesteuerten Entwicklung.
In jenen jüngeren Tagen wurde uns geraten, ein einheitliches Modell des gesamten Geschäfts zu erstellen, aber DDD erkennt an, dass wir erfahren haben, dass "eine vollständige Vereinheitlichung des Domänenmodells für ein großes System nicht machbar oder kostengünstig sein wird" 1 . Stattdessen unterteilt DDD ein großes System in begrenzte Kontexte, von denen jeder ein einheitliches Modell haben kann - im Wesentlichen eine Möglichkeit, MultipleCanonicalModels zu strukturieren.