Ссылка корневого объекта на другой корневой - PullRequest
3 голосов
/ 05 мая 2011

Я столкнулся с типичной проблемой DDD. Это должно быть очень просто. У меня есть заказ и клиент. Клиент может создать несколько заказов. Клиент является корнем своей совокупности. Порядок является корнем своей совокупности. Но когда клиент создает заказ, мы отображаем некоторую часть информации о клиенте в заказе. Должен ли агрегат заказа содержать ссылку на клиента? Когда он удерживает его, тогда, когда Репозиторий заказов получает заказ, мы можем также извлечь некоторую часть информации о клиенте для отображения. Но когда мы вовлекаем заказ в транзакцию, клиент также попадает в него, что создает проблему, если клиент также обновляется одновременно. Пожалуйста, посоветуйте, ребята! Мое инстинктивное чувство говорит, что я НЕ ДОЛЖЕН ссылаться на клиента из заказа.

  • Вопрос 2: (НОВЫЙ)

Могу ли я получить и удерживать ссылку на Клиента (из Репозитария Клиента) для данного Заказа при создании Заказа (с использованием Фабрики заказов) и безопасно сохранить Заказ (в любом случае не обновляя Клиента внутри, Клиент существует только для информация / запрос?) без создания разногласий, если тот же клиент модифицируется еще где? Предположим, NHibernate как ORM.

1 Ответ

2 голосов
/ 06 мая 2011

Простым ответом будет то, что у вас есть идентификатор клиента или, если необходимо, для вашего домена какой-нибудь ValueObject с минимальным набором информации о клиенте (идентификатор, имя).

Более сложный ответ - подумать об ограниченном контексте.См. презентацию Эрика Эванса , где он хотел бы, чтобы глава BC была первой главой книги.

Идея состоит в том, что в вашем ограниченном контексте управления клиентами ваша сущность клиента может быть AR совокупности клиентов, а заказы могут быть сущностями в совокупности клиентов.В Ограниченном контексте выставления счетов вы можете иметь AR заказа с сущностью Customer внутри.

...