Domain-Driven Design: Domänengesteuertes Design
Domain-Driven Design: Domänengesteuertes Design
Zusammenfassung:
Einleitung
Das Buch von Eric Evans „Domain-Driven Design: Tackling Complexity in the Heart of Software“ (2003) ist ein grundlegendes Werk, das die Vorstellung vom Design komplexer Softwaresysteme revolutioniert hat. Obwohl die Beispiele im Buch in Java geschrieben sind, sind seine Ideen universell und werden aktiv im Python-Ökosystem (Django, FastAPI, SQLAlchemy) angewendet. Für die Bildungswebsite pythonlib.ru ist dies eine Pflichtempfehlung für alle, die vom „Code um des Codes willen“ zur Erstellung sinnvoller, wartbarer und flexibler Anwendungen übergehen möchten.
Worum geht es in diesem Buch?
Evans bietet nicht nur eine Reihe von Mustern, sondern eine ganzheitliche Entwicklungsphilosophie, deren Mittelpunkt die Fachdomäne (domain) steht – der Geschäfts- oder Tätigkeitsbereich, für den das Programm geschrieben wird. Die Grundidee: Der Code muss eine genaue Abbildung der mentalen Modelle der Experten dieses Bereichs sein. Das Buch ist in vier Teile gegliedert:
- Teil I: Problemstellung – erklärt, warum traditionelle Ansätze (Anarchie, monolithische Architektur, übermäßige Technologiebegeisterung) bei komplexen Projekten zum Scheitern führen.
- Teil II: Modellierung der Fachdomäne – führt die wichtigsten Bausteine ein: Entity (Entität), Value Object (Wertobjekt), Aggregate (Aggregat), Repository (Repository), Factory (Fabrik) und Service (Dienst).
- Teil III: Universelle Sprache (Ubiquitous Language) – zeigt, wie eine einheitliche Sprache zwischen Entwicklern und Experten geschaffen wird, die sowohl im Code als auch in Diskussionen verwendet wird.
- Teil IV: Strategisches Design – beschreibt die Arbeit mit mehreren Modellen in einem großen Projekt: Bounded Context (begrenzter Kontext), Context Map (Kontextkarte), Shared Kernel (gemeinsamer Kern) und Anti-Corruption Layer (Antikorruptionsschicht).
Für wen ist dieses Buch?
Das Buch richtet sich an erfahrene Entwickler und Softwarearchitekten, die bereits auf Probleme mit „Big Ball of Mud“ gestoßen sind und lernen möchten, Systeme zu bauen, die gegenüber Änderungen widerstandsfähig sind. Es wird nützlich sein für:
- Python-Entwickler, die an komplexen Webanwendungen arbeiten (ERP, CRM, Fintech, Medtech).
- Teamleiter und Tech Leads, die die Kommunikation mit Geschäftskunden verbessern möchten.
- Alle, die sich für Microservices-Architektur interessieren – DDD liegt vielen modernen Ansätzen zugrunde.
Was lernt der Leser?
Nach dem Studium des Buches werden Sie in der Lage sein:
- Entitäten von Wertobjekten zu unterscheiden und richtig zwischen ihnen zu wählen.
- Aggregate zu entwerfen – Grenzen der transaktionalen Konsistenz.
- Repositories zu erstellen zur Kapselung des Datenzugriffs.
- Fabriken anzuwenden zur Erstellung komplexer Objekte.
- Begrenzte Kontexte zu identifizieren und eine Kontextkarte für große Systeme zu erstellen.
- Die Zusammenarbeit mit Experten durch eine universelle Sprache zu organisieren.
- Antipatterns zu vermeiden wie das „Anemic Domain Model“.
Stärken des Buches
1. Tiefe und Systematik. Evans gibt keine fertigen Rezepte, sondern lehrt das Denken. Jedes Kapitel ist ein Schritt zum Verständnis, wie das Modell zum Kern des Systems wird.
2. Praktische Beispiele. Das durchgängige Beispiel mit einem Containerfracht-Managementsystem (Cargo Shipping) zeigt anschaulich, wie abstrakte Konzepte in Code umgesetzt werden.
3. Aktualität. Trotz des Jahres 2003 erleben die Ideen von DDD heute eine Renaissance dank Microservices, Event Sourcing und CQRS.
4. Sprachneutralität. Obwohl die Beispiele in Java sind, kann jeder Entwickler in Python, C# oder Ruby sie leicht an seinen eigenen Stack anpassen.
Wem wird es besonders empfohlen?
Wenn Sie in Python schreiben und Django ORM oder SQLAlchemy verwenden, hilft Ihnen das Buch, Modelle nicht in bloße Datenträger zu verwandeln.
Empfehlungen
JavaScript (Node.js) für Data Science: Datenanalyse und maschinelles Lernen auf dem Server
Funktionale Programmierung in Kotlin: Von den Grundlagen bis zu fortgeschrittenen Techniken
Testen von C++-Anwendungen: Von Modultests bis zur Integrationsabdeckung
JavaScript (Node.js): Tipps und Best Practices
Refactoring von TypeScript-Code: Verbesserung von Projekten mit bewährten Methoden
TypeScript Blueprints