Big Picture Event Storming is a Domain Driven Development practice that can help us to better understand our domain, align developers and domain experts and then use this knowledge to prepare better designs.
During the session I like to collect Events, both:
- Domain Events — something happened that domain experts care about.
- System Events — that reflect activity within the software itself
Events are immutable, as they are a record of something in the past. During the session we want:
- to collect event in a brainstorming way,
- refine and duplicate events,
- place events in order on a timeline,
- define causes and consequences, and then
- find Aggregates and Bounded Contexts
We can use Event Storming by Judith Birmoser Miro template. Please take a look at a template instructions to get familiar with steps.
A common, rigorous language used between developers, domain experts and business users. This language should be based on or influence the Domain Model.
By using the model-based language pervasively and not being satisfied until it flows, we approach a model that is complete and comprehensible, made up of simple elements that combine to express complex ideas.
Domain experts should object to terms or structures that are awkward or inadequate to convey domain understanding; developers should watch for ambiguity or inconsistency that will trip up design.
— Eric Evans
Aggregate is a pattern in Domain-Driven Design. A DDD aggregate is a cluster of domain objects that can be treated as a single unit. An example may be an order and its line-items, these will be separate objects, but it’s useful to treat the order (together with its line items) as a single aggregate.
An aggregate will have one of its component objects be the aggregate root. Any references from outside the aggregate should only go to the aggregate root. The root can thus ensure the integrity of the aggregate as a whole.
Aggregates are the basic element of transfer of data storage – you request to load or save whole aggregates. Transactions should not cross aggregate boundaries.
DDD Aggregates are sometimes confused with collection classes (lists, maps, etc). DDD aggregates are domain concepts (order, clinic visit, playlist), while collections are generic. An aggregate will often contain mutliple collections, together with simple fields. The term „aggregate” is a common one, and is used in various different contexts (e.g. UML), in which case it does not refer to the same concept as a DDD aggregate.