Совокупность сама по себе должна быть последовательной, однако связанные агрегаты могут в конечном итоге соответствовать друг другу. Фактически, конечная согласованность является общей парадигмой DDD в распределенных сценариях. Совокупность можно рассматривать как границу согласованности. Это означает, что совокупность определяется с точки зрения того, что должно быть последовательным, а не чисто отражением реальности.
В качестве примера поведение в агрегате может публиковать событие домена, которое затем публикуется извне. Внеполосный обработчик для этого события может привести ко всей системе в последовательное состояние в конечном итоге. Много раз возможная согласованность является вполне приемлемым бизнес-ограничением, тем более что возможная согласованность в действительности гораздо более распространена.
Посмотрите на Effective Aggregate Design by Vaughn Vernon, чтобы узнать больше об этом.
UPDATE
В конечном итоге последовательное резервирование агрегатов должна быть оценена на основе каждого конкретного случая. Некоторые агрегаты будут хорошо подходят для разрешения конфликтов, возможно, с действиями естественной компенсации. Эти типы конфликтов будут разрешаться способами, сходными с конфликтами в стиле CQRS, где требуются действия по компенсации, чтобы привести систему в согласованное состояние. Как и в CQRS, последствия возможной согласованности должны обсуждаться с экспертами домена.
Вы описали определение агрегатов DDD для учебников, подтверждающее еще большее введение в мой вопрос. Однако как насчет избыточности агрегатов, а точнее: как вы обрабатываете избыточные копии, размещенные в разрозненных центрах обработки данных для нужд геолокации? –
Задачи, такие как синхронизация между хранилищами данных, должны обрабатываться репозиториями или, возможно, службами (репозиторий является гораздо более стандартным подходом IMHO). Что в домене - это просто бизнес-правила, указывающие, что такое сущность и как она преобразуется. – Mathieson