Глоссарий
Aggregate
Кластер связанных сущностей, к которым обращаются через единый корень (Aggregate Root). Транзакционная граница домена.
Aggregate — введён Эваном Эвансом в Domain-Driven Design (2003). Кластер объектов, к которым обращаются как к единому целому через Aggregate Root.
Ключевые свойства:
- Транзакционная граница. Одна бизнес-операция изменяет один aggregate. Между aggregate — eventual consistency.
- Инкапсуляция инвариантов. Инварианты, требующие консистентности, живут внутри aggregate. Извне никто не может сломать их.
- Единственная точка доступа. Внешний код обращается только к Root; child entities скрыты.
- Ссылки по ID, не по объекту. Один aggregate ссылается на другой через
AggregateId, не через прямой reference.
Правила Vernon (Effective Aggregate Design, 2011):
- Small aggregates. Большой aggregate — узкое место контенции.
- Reference other aggregates by identity.
- Update aggregates eventually consistent.
Repository работает 1:1 с Aggregate Root. OrderRepository возвращает Order со всеми OrderLine (child). Отдельного OrderLineRepository не бывает.