Skip to content
This repository has been archived by the owner on Feb 20, 2021. It is now read-only.

Glos aggregate

Christopher Bennage edited this page Jan 30, 2015 · 1 revision

Aggregate

A logical grouping of "things" (Entities and Value Objects) that belong together at all times. An Aggregate is treated as a single unit for the purpose of persistence, and references are only allowed to the Aggregate Root.

An aggregate is a representation of a consistency boundary (usually transaction consistency). In most cases, aggregates should be modelled depending on transactions. In Event-Sourcing, streams are partitioned by Aggregate-IDs.

Aggregate definition from Eric Evans book:

A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the Aggregate, designated as the root. A set of consistency rules applies within the Aggregate's boundaries. Problem: It is difficult to guarantee the consistency of changes to objects in a model with complex associations. Invariants need to be maintained that apply to closely related groups of objects, not just discrete objects. Yet cautious locking schemes cause multiple users to interfere pointlessly with each other and make a system unusable. [DDD, p. 126] Solution: Cluster the Entities and Value Objects into Aggregates and define boundaries around each. Choose one Entity to be the root of each Aggregate, and control all access to the objects inside the boundary through the root. Allow external objects to hold references to root only. Transient references to the internal members can be passed out for use within a single operation only. Because the root controls access, it cannot be blindsided by changes to the internals. This arrangement makes it practical to enforce all invariants for objects in the Aggregate and for the Aggregate as a whole in any state change. [DDD, p. 129]