
What is an aggregate root?
An aggregate is a cluster of domain objects that is treated as a single unit.
Any references from outside the aggregate should only go to the aggregate root so that root can ensure the integrity of the aggregate as a whole.
As an aggregate root is responsible for maintaining integrity of the whole, it is the primary responsible for deciding if a command can be executed on the aggregate or not.
This decission will be recorded as an event on an event stream and any internal state is updated in response to the recorded event.