У меня есть следующая проблема моделирования предметной области, из-за которой я, кажется, либо пересекаю границы согласованности, либо создаю огромный агрегат. Может ли кто-нибудь помочь мне разобраться с этим?
Есть два типа работы JobA
, JobB
. JobA
состоит из задач TaskA
. JobB
состоит из задач TaskB
. JobA
и JobB
не связаны. Единственное, что их объединяет, это то, что им обоим нужен ресурс оборудования. Изначально я хотел создать 5 совокупных корней, которые могут ссылаться друг на друга - JobA
будет ссылаться на TaskA
и так далее.
Я могу объединить работу и ее задачи в одну совокупность. Это происходит за счет введения других накладных расходов, поскольку задачи сами по себе являются сложными существами. Однако следующие ограничения не позволяют мне использовать любую из этих моделей.
- Работа не может быть помечена как завершенная, если какая-либо задача еще не завершена. Эта проверка заставляет транзакции пересекать границы агрегатов (например,
TaskA
иJobA
). - Оборудование не может быть назначено более чем на 1 работу. Эта проверка будет охватывать оба агрегата заданий.
- Оборудование должно быть выпущено до того, как работа будет отмечена как завершенная. Эта транзакция будет пересекать агрегаты оборудования и работы.
Наличие единого агрегата поместит все транзакции в границы, но это сделает агрегат невероятно большим. Есть ли во всем этом другая модель, которую мне не хватает?