Was ist Domain-Driven Design?
DDD ist eine Ansatzweise zur Softwareentwicklung, die sich auf das Verständnis des Geschäftsbereichs und das Modellieren von Software um ihn herum konzentriert. Es geht um Sprache, Grenzen und Muster.
Kernkonzepte
Grenzen
Eine Grenze definiert die Grenze innerhalb derer ein bestimmter Domänenmodell anwendbar ist. Das Gleiche Wort kann in verschiedenen Kontexten unterschiedliche Bedeutungen haben.
// Bestellkontext
class Order {
constructor(id, customerId, items, status) {
this.id = id;
this.customerId = customerId; // Verweis, nicht vollständiges Objekt
this.items = items;
this.status = status;
}
}
// Lagerkontext
class StockItem {
constructor(productId, warehouse, quantity) {
this.productId = productId;
this.warehouse = warehouse;
this.quantity = quantity;
}
}Aggregate
Ein Aggregate ist ein Cluster von Domänenobjekten, das als einzelnes Einheit für Datenänderungen behandelt wird. Der Aggregate-Wurzel ist der einzige Eingangspunkt für Modifikationen.
class OrderAggregate {
constructor(order) {
this.order = order;
this.items = [];
}
addItem(product, quantity) {
const item = new OrderItem(product.id, quantity, product.price);
this.items.push(item);
this.order.total = this.items.reduce((sum, i) => sum + i.subtotal, 0);
}
}Event Storming
Eine kollaborative Technik zur Entdeckung von Domänenereignissen, Befehlen und Aggregate. Führen Sie ein Workshop mit Domänenexperten und Entwicklern gemeinsam durch.
- Posten Sie Notizzettel für Domänenereignisse (orange)
- Identifizieren Sie Befehle, die Ereignisse auslösen (blau)
- Gruppieren Sie verwandte Ereignisse in Aggregate (gelb)
- Definieren Sie Grenzen um Cluster herum
Zusammenfassung
DDD geht nicht um Muster – es geht um das Verständnis des Domänenbereichs. Investieren Sie Zeit in ubiquitären Sprache und Domänenmodellierung, bevor Sie Code schreiben.