Domain-Modell
Frameworkfreie Fachobjekte, Werttypen und Zustandsübergänge.
Java 21Layered6 Use CasesOfflinefähig
Domain-Modell der Layered-Variante
Ziel
Das Modul layered-domain schützt fachliche Invarianten mit reinem Java 21. Es enthält keine Framework-Anmerkungen und keine technischen Persistenzdetails.
Paketstruktur
com.aydinsude.enterprise.layered.domain
├── shared
├── customer
├── catalog
├── order
├── inventory
├── payment
├── billing
└── eventModellierungsprinzipien
- Identitäten sind typisierte Value Objects.
- Geld und Menge sind keine primitiven Parameter.
- Order ist die Konsistenzgrenze für Bestellpositionen und Statuswechsel.
- Produktdaten werden beim Bestellen als Snapshot übernommen.
- Invoice ist nach Ausstellung unveränderlich.
- Domain Events sind typisiert, ihre Zustellung bleibt ein Port der Anwendungsschicht.
Implementierte Zustandsübergänge
| Objekt | Ausgang | Operation | Ziel |
|---|---|---|---|
| Order | PLACED | Bestand vollständig reserviert | INVENTORY_RESERVED |
| Order | INVENTORY_RESERVED | Zahlung autorisiert | PAYMENT_AUTHORIZED |
| Order | INVENTORY_RESERVED | Zahlung fachlich abgelehnt | PAYMENT_FAILED |
| Customer | ACTIVE | suspend | SUSPENDED |
| Customer | SUSPENDED | activate | ACTIVE |
| Product | ACTIVE | deactivate | INACTIVE |
Schutz vor Primitive Obsession
Customer.Id, Product.Id, Order.Id, Payment.Id, Invoice.Id, Money, Quantity, Address, Sku, Email und IdempotencyKey verhindern, dass fachlich unterschiedliche Werte versehentlich vertauscht werden.