Глоссарий
Aggregate Root
Единственный объект внутри aggregate, к которому имеет доступ внешний код. Владеет child entities и защищает инварианты.
Aggregate Root — «главная» сущность aggregate. Внешний код никогда не хранит ссылки на child entities напрямую — только на Root.
Root:
- имеет глобальную идентичность (
OrderId); - является единственной точкой входа для операций над aggregate;
- отвечает за поддержание инвариантов;
- контролирует создание и удаление child entities.
Пример: Order — Root, OrderLine — child. Клиентский код не может напрямую вызвать line.change_quantity(5) — только через order.update_line_quantity(line_id, 5). Это защищает инвариант «total = сумма line total’ов».
Repository работает только с Root: OrderRepository.find_by_id(order_id) -> Order.