JEnterprise Senior Java Workbench
Senior Java · Fachbereich

Domain-Driven Design Studio

Strategisches und taktisches DDD mit geführter Modellierung vom Geschäftsproblem zum ausführbaren Modell. Nutze die Seite für eine konkrete Engineering-Aufgabe: Kläre zuerst Ziel und Risiko und halte danach Ergebnis, Nachweis und nächsten Schritt fest.

Zur Übersicht

Arbeitsauftrag

Wann verwenden?

Wenn Begriffe, Verantwortungsgrenzen oder fachliche Regeln unklar beziehungsweise zwischen Teams umstritten sind.

Nicht dafür verwenden

Nicht zum Erfinden zusätzlicher Schichten für einfache CRUD-Verwaltung.

Definition of Done

Ubiquitous Language, Bounded Context, Invarianten, Aggregate-Grenzen und relevante Domain Events sind mit Fachseite abgestimmt.

Fachbegriffe und Grenzen gemeinsam entwickeln
Invarianten in Aggregaten schützen
Integrationen zwischen Bounded Contexts bewusst entwerfen
Vom Problem zur Sprache

Der Ausgangspunkt ist ein beobachtbares Geschäftsproblem, nicht eine Tabellenstruktur oder ein Framework. Ubiquitous Language verbindet Fachbereich, Entwicklung und Tests.

Begriffe werden nur aufgenommen, wenn Bedeutung, Gültigkeitsbereich und Gegenbeispiele geklärt sind.

TEXT
Begriff: Reservierung
Bedeutung: Zeitlich begrenzte Zusage eines Bestands
Gültig in: Availability Context
Nicht identisch mit: Bestellung, Zahlung, Versand
Invariante: Eine Reservierung darf verfügbaren Bestand nicht unterschreiten
Aggregate und Invarianten

Ein Aggregate ist eine Konsistenzgrenze. Es wird so klein wie möglich und so groß wie fachlich notwendig modelliert.

Andere Aggregate werden über Identitäten referenziert. Globale Objektgraphen erschweren Transaktionsgrenzen und Skalierung.

JAVA
public final class Reservation {
    private final ReservationId id;
    private final ProductId productId;
    private Quantity quantity;
    private ReservationStatus status;

    public void confirm(Clock clock) {
        if (status != ReservationStatus.PENDING) {
            throw new IllegalStateException("Nur offene Reservierungen sind bestätigbar");
        }
        status = ReservationStatus.CONFIRMED;
    }
}
Context Map

Zwischen Bounded Contexts werden Verantwortlichkeit, Richtung und Übersetzung explizit festgelegt. Ein Anti-Corruption Layer schützt das eigene Modell vor fremden Begriffen und Lebenszyklen.

TEXT
Sales Context --[Customer/Supplier]--> Pricing Context
Sales Context --[ACL]---------------> Legacy ERP
Fulfillment Context --[Published Language]--> Tracking Consumers

Praxisartefakt · Aggregate Canvas

Aggregate
Order
Invariante
Eine versandte Bestellung darf nicht storniert werden.
Command
CancelOrder mit OrderId, Actor und Reason.
Ergebnis
OrderCancelled oder fachlicher Fehler OrderAlreadyShipped.
Außerhalb der Grenze
Erstattung und Versandkorrektur reagieren über Events; sie gehören nicht in dieselbe Transaktion.
⌂ Cockpit