Domain Driven Design ist eine Methodik und Prozessvorschrift für die Entwicklung komplexer Systeme, deren Schwerpunkt auf der Abbildung von Aktivitäten, Aufgaben, Ereignissen und Daten innerhalb einer Problemdomäne auf die technologischen Artefakte 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 mit einem bestimmten Satz von Technologien implementiert werden kann. Die Methodik des Domain Driven Design liefert Leitlinien dafür, wie diese Modell- und Technologieentwicklung zu einem System führen kann, das die Bedürfnisse der Nutzer erfüllt und gleichzeitig robust gegenüber Veränderungen im Problembereich ist.
Die Prozessseite von Domain Driven Design beinhaltet die Zusammenarbeit zwischen Domänenexperten, d. h. Personen, die die Problemdomäne kennen, und den Design-/Architektur-Experten, d. h. Personen, die die Lösungsdomäne kennen. Die Idee ist, ein gemeinsames Modell mit einer gemeinsamen Sprache zu haben, so dass Menschen aus diesen zwei verschiedenen Bereichen mit ihren unterschiedlichen Perspektiven die Lösung diskutieren, während sie tatsächlich eine gemeinsame Wissensbasis mit gemeinsamen Konzepten besprechen.
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 geht um mehr als nur ein Objektmodell. Der Schwerpunkt liegt auf der gemeinsamen Kommunikation und der Verbesserung der Zusammenarbeit, so dass die tatsächlichen Bedürfnisse innerhalb des Problembereichs ermittelt und eine geeignete Lösung zur Erfüllung dieser Bedürfnisse geschaffen werden kann.
Bereichsorientiertes Design: Das Gute und das Herausfordernde gibt mit diesem Kommentar einen kurzen Überblick:
DDD hilft bei der Entdeckung der Top-Level-Architektur und informiert über die Mechanik und Dynamik des Bereichs, den die Software abbilden muss nachbilden muss. Konkret bedeutet dies, dass eine gut durchgeführte DDD-Analyse Missverständnisse zwischen Domänenexperten und Softwarearchitekten minimiert und Softwarearchitekten minimiert und die Anzahl der teuren Änderungswünsche für Änderungen. Durch die Aufteilung der Domänenkomplexität in kleinere Kontexte, vermeidet DDD, dass Projektarchitekten gezwungen sind, ein aufgeblähtes Objektmodell zu entwerfen Objektmodell zu entwerfen, bei dem viel Zeit für die Ausarbeitung von Implementierungsdetails verloren geht - zum Teil, weil die Anzahl der zu Teil, weil die Anzahl der Entitäten, mit denen man sich befassen muss, oft die Größe von Whiteboards in Konferenzräumen übersteigt.
Siehe auch diesen Artikel Bereichsorientiertes Design für die Dienstleistungsarchitektur die ein kurzes Beispiel liefert. Der Artikel enthält die folgende Kurzbeschreibung von Domain Driven Design.
Domain Driven Design befürwortet die Modellierung auf der Grundlage der Realität der Geschäftswelt, die für unsere Anwendungsfälle relevant ist. Da es nun älter wird und der Hype-Level abnimmt, vergessen viele von uns, dass der DDD-Ansatz wirklich wirklich dabei hilft, das Problem zu verstehen und die Software in Richtung das gemeinsame Verständnis der Lösung. Bei der Entwicklung von Anwendungen, DDD spricht über Probleme als Domänen und Subdomänen. Es beschreibt unabhängige Schritte/Bereiche von Problemen 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 Root-Regeln zur die Implementierung zu unterstützen.
Martin Fowler hat eine Reihe von Artikeln geschrieben, in denen Domain Driven Design als Methodik erwähnt wird. Zum Beispiel dieser Artikel, BoundedContext bietet einen Überblick über das Konzept des begrenzten Kontexts aus dem Domain Driven Development.
In jenen jüngeren Tagen wurde uns geraten, ein einheitliches Modell der des gesamten Unternehmens zu erstellen, aber DDD erkennt an, dass wir gelernt haben, dass "total Vereinheitlichung des Domänenmodells für ein großes System nicht machbar oder kosteneffektiv ist". 1 . Stattdessen unterteilt DDD ein großes System in Bounded Contexts auf, von denen jeder ein vereinheitlichtes Modell haben kann - im Wesentlichen eine Art der Strukturierung von MultipleCanonicalModels.