Domain-Driven Design für Microservices
DDD Grundkonzepte
Ubiquitous Language
- Gemeinsame Sprache
- Fachbegriffe im Code
- Kommunikation vereinfacht
- Missverständnisse reduziert
Bounded Context
- Explizite Grenze
- Eigenes Modell innerhalb
- Unabhängige Entwicklung
- Basis für Service-Schnitt
Taktische Patterns
Entity
- Identität über Zeit
- Veränderlicher Zustand
- Primärschlüssel/ID
- Lifecycle Management
Value Object
- Keine Identität
- Unveränderlich (Immutable)
- Gleichheit durch Werte
- Beispiel: Address, Money
Aggregate
- Konsistenzgrenze
- Root Entity
- Transaktionale Einheit
- Referenzen nur über Root
Domain Event
- Etwas ist passiert
- Vergangenheitsform (OrderPlaced)
- Trigger für Reaktionen
- Event Sourcing Basis
Repository
- Persistenz-Abstraktion
- Collection-ähnliches Interface
- Aggregate-orientiert
Domain Service
- Domänenlogik ohne Entity
- Stateless Operations
- Cross-Aggregate Logic
Strategische Patterns
Context Mapping
- Beziehungen zwischen Contexts
- Integration Patterns
- Abhängigkeiten visualisiert
Relationship Patterns
- Partnership
- Shared Kernel
- Customer-Supplier
- Conformist
- Anti-Corruption Layer
- Open Host Service
- Published Language
Event Storming
Workshop-Format
- Domain Events sammeln
- Timeline erstellen
- Commands identifizieren
- Aggregates finden
- Bounded Contexts ableiten
Artefakte
- Event Timeline
- Commands und Policies
- Aggregate Boundaries
- Context Map
Microservices-Schnitt
Regeln
- Ein Service = Ein Bounded Context
- Kommunikation über APIs
- Geteilte Kernel vermeiden
- Anti-Corruption Layer nutzen
Typische Contexts
- Ordering Context
- Inventory Context
- Shipping Context
- Billing Context
- Customer Context
Implementierung
Hexagonale Architektur
- Domain im Zentrum
- Ports und Adapters
- Infrastruktur außen
Clean Architecture
- Dependency Inversion
- Use Cases
- Entities unabhängig
Best Practices
- Mit Fachexperten arbeiten
- Ubiquitous Language pflegen
- Context Boundaries respektieren
- Kleine Aggregates bevorzugen
- Domain Events nutzen
CFTools Software wendet DDD-Prinzipien bei der Microservices-Entwicklung an.