Допустим, я реализую проект, управляемый предметной областью, с использованием C# и Entity Framework.
Мой код структурирован таким образом, что каждый агрегат имеет собственный dbcontext в EF, чтобы соблюдать принцип транзакционных границ вокруг моих агрегатов.
Агрегат 1, InventoryAggregate и агрегат 2, OrderAggregate, обновляются некоторым бизнес-процессом AddItemToOrder.
После того, как OrderAggregate добавляет элемент, он запускает событие предметной области ItemAddedToOrder, которое прослушивается InventoryAggregate, который затем выполняет некоторый бизнес-процесс SubtractQuantityFromInventory.
InventoryAggregate не может вычесть инвентарь и запускает доменное событие NotEnoughInventory, прослушиваемое OrderAggregate.
Затем OrderAggregate пытается удалить элемент из заказа, но терпит неудачу.
Теперь в заказе есть предмет, которого не должно быть, потому что у нас на самом деле недостаточно инвентаря для продажи предмета.
Как с этим справиться?