Все еще чтение и изучение DDD и попытка применить его к проекту, над которым я работаю. Я все еще пытаюсь обойти Агрегаты и наткнулся на интересный вопрос.DDD: Сохранение ограничений по совокупности
Предположим, у меня есть 2 Агрегата 1, у которых есть Учетная запись для корня, а другая - для пользователя для корня.
Учетная запись не может быть создана без Пользователя, но пользователь может, поэтому они оба служат в качестве корня их собственных агрегатов. Обратите внимание: их агрегированные объекты включают другие объекты, но это не важно для моего вопроса.
Некоторые бизнес-правила: 1) Когда создается учетная запись, она должна быть связана с пользователем. Если Пользователь не существует, он должен быть сначала создан.
2) Когда Учетная запись удалена, ее ассоциированный Пользователь также должен быть удален.
3) Когда пользователь создан, его не нужно связывать с учетной записью.
3) Когда пользователь удаляется, если он связан с учетной записью, он также должен быть удален.
Поскольку учетная запись и пользователь формируют свои собственные агрегаты, вероятно, будут иметь свои собственные репозитории. Это означает, что каждый из этих репозиториев будет определять стандартные методы добавления, удаления, поиска и удаления.
Так что, учитывая эти сценарии, наилучшим способом выполнить следующее: 1) Когда создается учетная запись, я решил, что я буду ссылаться на Свойство «Свойство» для проверки того, что Пользователь обеспечивает его существование. Это правильно?
2) Когда удалена учетная запись, как мне также удалить связанный с ней Пользователь. Из учетной записи? Но не будет ли это дублировать код в репозитории пользователей? Или могут ли репозитории ссылаться и ссылаться друг на друга?
3) Когда пользователь удаляется, что является лучшим способом определить, связано ли оно с учетной записью и удалить ее без дублирования кода (возможно, аналогично второму вопросу).
Я где-то читал, что если логика пересекает две Сущности или Агрегаты, подумайте об использовании Сервиса. Но я не согласен с тем, что останавливает клиента (при условии, что API будет развиваться, а пользователь с другими презентациями в будущем), минуя Сервис и просто вызывая репозитории?
Update 1:
Просто понял, что это, вероятно, связанный с этим вопрос: How should I enforce relationships and constraints between aggregate roots?