The Aggregate is dead. Long live the Aggregate!
summary
Argument: traditional Aggregates bind consistency, concurrency and storage so tightly that refactoring and parallelism suffer. Proposal: replace aggregate ownership with event sourcing over queryable streams, tag events with domain identifiers, and use a conditional append (an optimistic-lock append that checks a stream query and last-event id) to avoid races. The implemented pattern named dynamic consistency boundary stores single factual events with multiple pointers, halves duplicated events, narrows contention to needed queries, simplifies refactoring, and still requires cross-bounded-context synchronization when domains span services.
AI-written summary · about
chapters (16)
- 0:00Introduction
- 0:45What is an aggregate
- 3:17Five villains of aggregates
- 8:15Aggregate vs storytelling
- 9:18Aggregates mix concerns
- 13:16Larger aggregates contention
- 17:48Aggregates hard to refactor
- 20:16Multi-aggregate transactions
- 24:41Aggregate pitfalls summary
- 25:24Focus on behavior
- 30:01Concurrency without aggregates
- 32:08Conditional append for event sourcing
- 37:14Removing aggregate ownership
- 41:27Dynamic consistency boundaries
- 45:04Benefits of dynamic boundaries
- 47:08Conclusion and Q&A
related talks
48mThe Aggregate is dead. Long live the Aggregate!
48mThe Aggregate is dead. Long live the Aggregate!
50mThe Aggregate is dead. Long live the Aggregate!
50mDeveloping Microservices with Aggregates
50mEntities and Aggregates: The Moment We 'Clicked' and Understood...
43mEvent Sourcing dealing with an eventful past
58mAll our aggregates are wrong
57mCombatting the Near Enemies of DDD -
