DDD Tactical — Notes
Sizing aggregates
- Small. If
save() writes 100 rows, the aggregate is too big.
- "Cluster around the invariant" — what must be transactionally consistent?
- Cross-aggregate references → ids only, eventual consistency via events.
Naming
- Aggregate root usually = the noun (
Order, Account, Booking).
- Value objects = self-describing types (
Money, Email, DateRange).
- Domain events = past tense (
OrderPlaced, not PlaceOrder).
Eventual consistency
- "When customer is renamed, update all their orders" — emit
CustomerRenamed, listener updates each order aggregate eventually.
- Surface staleness window to the product team; SLAs in seconds, not microseconds.
Refs
- Eric Evans: Domain-Driven Design (the original, 2003).
- Vaughn Vernon: Implementing Domain-Driven Design (2013).
- Vaughn Vernon: Domain-Driven Design Distilled (short version).
- DDD Crew: dddcrew.com (modern resources + bounded-context canvas).