Aggregate — введён Эваном Эвансом в Domain-Driven Design (2003). Кластер объектов, к которым обращаются как к единому целому через Aggregate Root.

Ключевые свойства:

  1. Транзакционная граница. Одна бизнес-операция изменяет один aggregate. Между aggregate — eventual consistency.
  2. Инкапсуляция инвариантов. Инварианты, требующие консистентности, живут внутри aggregate. Извне никто не может сломать их.
  3. Единственная точка доступа. Внешний код обращается только к Root; child entities скрыты.
  4. Ссылки по 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 не бывает.

Синонимы

AggregateАгрегат

Не путать с

← ко всему глоссарию