Domain-Driven Design (DDD) ist ein Ansatz zur Softwareentwicklung, der den Fokus auf die Modellierung des zugrunde liegenden Fachgebiets (der Domain) legt. Ziel ist es, komplexe Softwarelösungen zu entwickeln, die eng mit den Anforderungen und dem Verständnis der realen Geschäftswelt übereinstimmen. DDD wurde von Eric Evans in seinem Buch "Domain-Driven Design: Tackling Complexity in the Heart of Software" popularisiert.
Die Grundidee hinter DDD ist, dass die Struktur und das Verhalten der Software die zugrunde liegende Fachdomäne widerspiegeln sollten, um sicherzustellen, dass Entwickler, Fachexperten und andere Stakeholder effektiv zusammenarbeiten können.
Domain: Die Fachdomäne ist der zentrale Fokus von DDD und bezeichnet den Bereich des Geschäfts oder der Branche, die durch die Software abgebildet werden soll (z.B. E-Commerce, Finanzwesen).
Ubiquitous Language (Allgegenwärtige Sprache): Eine gemeinsame Sprache, die von Entwicklern und Fachexperten verwendet wird, um die Domäne klar und präzise zu beschreiben. Diese Sprache hilft, Missverständnisse zu vermeiden.
Entities und Value Objects:
Aggregates: Eine Gruppe von zusammenhängenden Objekten (Entities und Value Objects), die als eine Einheit behandelt werden. Aggregates haben immer eine Root Entity (Wurzelentität), die als zentraler Zugriffspunkt dient.
Repositories: Speichern und verwalten der Aggregates. Sie fungieren als Schnittstellen, um den Zugriff auf Daten und das Speichern von Objekten zu abstrahieren.
Services: Methoden oder Operationen, die bestimmte Domänenlogiken implementieren, aber nicht direkt zu einer spezifischen Entität gehören.
Bounded Context: Ein klar abgegrenzter Bereich innerhalb der Domäne, in dem bestimmte Begriffe und Konzepte eindeutig definiert und verwendet werden. Verschiedene Bounded Contexts können unterschiedliche Modelle derselben Begriffe haben.
Domain Events: Ereignisse, die innerhalb der Domäne auftreten und signalisieren, dass etwas Relevantes passiert ist, was zu einer Änderung im Zustand führen kann.
Domain-Driven Design ist besonders hilfreich in komplexen Projekten, bei denen die Geschäftslogik im Mittelpunkt steht und sich oft ändert.