Skip to content

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).