Zum Inhalt springen

Glossar · D

DDD

Domain-Driven Design. Software-Design-Ansatz, der die Fachlichkeit eines Geschäftsbereichs in den Mittelpunkt der Architektur stellt.

Definition

Domain-Driven Design (DDD) ist ein Software-Design-Ansatz, der darauf abzielt, komplexe Softwareprojekte durch eine enge Zusammenarbeit zwischen Fachleuten und Entwicklern zu gestalten. Der Fokus liegt dabei auf der Modellierung der Fachlichkeit eines Geschäftsbereichs, um eine klare und verständliche Softwarearchitektur zu schaffen. DDD fördert die Verwendung einer gemeinsamen Sprache, die als „Ubiquitous Language“ bezeichnet wird, um Missverständnisse zwischen den verschiedenen Stakeholdern zu vermeiden.

Der Ansatz wurde von Eric Evans in seinem Buch „Domain-Driven Design: Tackling Complexity in the Heart of Software“, das 2003 veröffentlicht wurde, populär gemacht. Evans beschreibt DDD als eine Methodik, die es ermöglicht, die Komplexität von Softwareprojekten zu bewältigen, indem sie sich auf die zugrunde liegenden Geschäftsprozesse und -regeln konzentriert.

Was bedeutet das für Ihr Unternehmen?

Domain-Driven Design lohnt sich bei Software mit vielen fachlichen Regeln, etwa Tarifberechnungen, Genehmigungsabläufen oder Logistikprozessen, bei denen Fehler teuer werden. Für Sie als Auftraggeber bedeutet der Ansatz vor allem Zeit für gemeinsame Workshops, in denen Fachleute und Entwickler dieselben Begriffe festlegen. Bei schlichten Websites oder Standardanwendungen bringt DDD dagegen mehr Aufwand als Nutzen.

Hintergrund

Die Entstehung von Domain-Driven Design ist eine Reaktion auf die Herausforderungen, die bei der Entwicklung komplexer Softwareanwendungen auftreten. In vielen Fällen führte der Mangel an Kommunikation zwischen Fachabteilungen und Entwicklern zu unzureichenden Softwarelösungen, die die tatsächlichen Anforderungen nicht erfüllten. DDD bietet einen strukturierten Ansatz, um diese Probleme anzugehen und die Zusammenarbeit zu verbessern.

Ein zentrales Konzept von DDD ist die Identifikation von „Bounded Contexts“, die bestimmte Bereiche innerhalb eines Systems definieren. Jeder Bounded Context hat seine eigene Ubiquitous Language und seine eigenen Modelle, die auf die spezifischen Anforderungen des jeweiligen Bereichs zugeschnitten sind. Dies ermöglicht eine klare Trennung der Verantwortlichkeiten und fördert die Modularität der Software.

Funktionsweise

Domain-Driven Design umfasst mehrere Schlüsselkonzepte, darunter Entitäten, Wertobjekte, Aggregate und Repositories. Entitäten sind Objekte mit einer eindeutigen Identität, während Wertobjekte durch ihre Attribute definiert sind und keine eigene Identität besitzen. Aggregate sind Gruppen von Entitäten und Wertobjekten, die als eine Einheit behandelt werden, und Repositories bieten eine Möglichkeit, diese Aggregate zu speichern und abzurufen.

Ein weiterer wichtiger Aspekt von DDD ist die Verwendung von Domain-Events, die Veränderungen im Zustand eines Systems darstellen und die Kommunikation zwischen verschiedenen Komponenten erleichtern. Diese Events helfen dabei, die Reaktivität und Flexibilität der Softwarearchitektur zu erhöhen, indem sie es ermöglichen, auf Änderungen innerhalb des Systems zu reagieren, ohne dass eine enge Kopplung zwischen den Komponenten erforderlich ist.

Einsatzgebiete

Domain-Driven Design findet Anwendung in einer Vielzahl von Branchen, insbesondere in solchen, die komplexe Geschäftsprozesse und -regeln aufweisen. Dazu gehören unter anderem die Finanzdienstleistungsbranche, das Gesundheitswesen und die Logistik. In diesen Bereichen kann DDD dazu beitragen, die Softwareentwicklung effizienter zu gestalten und die Qualität der Lösungen zu verbessern.

Der Ansatz eignet sich besonders gut für Unternehmen, die agile Methoden anwenden, da DDD eine iterative und inkrementelle Entwicklung fördert. Durch die enge Zusammenarbeit zwischen Fachabteilungen und Entwicklern können Anforderungen frühzeitig identifiziert und in die Softwarearchitektur integriert werden, was zu einer höheren Anpassungsfähigkeit führt.

Abgrenzung

Domain-Driven Design wird häufig mit anderen Software-Design-Methoden verglichen, wie zum Beispiel der objektorientierten Programmierung (OOP) oder Model-Driven Architecture (MDA). Während OOP sich auf die Strukturierung von Code und die Wiederverwendbarkeit von Komponenten konzentriert, legt DDD den Schwerpunkt auf die Fachlichkeit und die Modellierung von Geschäftsprozessen.

Ein weiterer verwandter Ansatz ist die Event-Driven Architecture (EDA), die sich auf die Verarbeitung von Ereignissen innerhalb eines Systems konzentriert. Während DDD die Modellierung von Fachlichkeit in den Vordergrund stellt, zielt EDA darauf ab, Systeme reaktiv und skalierbar zu gestalten. Beide Ansätze können jedoch komplementär eingesetzt werden, um die Vorteile von DDD mit der Flexibilität von EDA zu kombinieren.

Verwandte Begriffe

Passende Leistung

Sie möchten wissen, was das für Ihr Projekt bedeutet? Sprechen Sie uns an.

Zur Leistung: Individuelle Software