DDD - как моделировать агрегатный корень? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть домен с именем product_catalog.В моем домене Брэнд может владеть многими продуктами.(Отношение 1 ко многим) В категории может быть много товаров, а товар может принадлежать ко многим категориям.Это отношение N-to-M.

Если я спроектирую продукт в качестве совокупного корня, не будет смысла извлекать продукт для создания бренда.Кроме того, мне нужно извлечь все бренды и сделать так, чтобы пользователь мог создавать больше брендов, поэтому я подозреваю, что бренд - это тоже совокупный корень.Это правильно?

А как насчет категорий и товаров?

1 Ответ

0 голосов
/ 24 февраля 2019

Дочерний объект в агрегате не имеет своего собственного жизненного цикла, т. Е. Объект сущности не может существовать самостоятельно вне агрегата, но зависит от объекта корневого объекта.Дочерняя сущность имеет локальную уникальную идентификацию внутри агрегата, в то время как корневая сущность имеет глобальную уникальную идентификацию.

Чтобы узнать, является ли сущность дочерней по отношению к корневой совокупной сущности, спросите себя: может ли сущность существовать?без корневого объекта?Если он может существовать сам по себе, то он не является дочерним, он является корнем другого агрегата, и вы должны ссылаться на него по идентификатору.

Поэтому я подозреваю, что бренд - это агрегаткорень тоже.Это правда?

Да, Бренд существует сам по себе, без Продукта.

А как насчет категорий и продукта?

Ну, я думаю, что они принадлежат к различным агрегатам, поскольку я вижу категории как способ классификации продуктов, но продукт существует сам по себе.Кроме того, продукт может относиться ко многим категориям.Таким образом, продукт не является дочерним по категории.И наоборот.

Категория и бренд - это две совокупности.

Я сомневаюсь в товаре.Это может быть сущность ребенка Бренда.Это зависит от ваших бизнес-правил.Является ли продукт, принадлежащий бренду, независимым?Может ли оно существовать само по себе?Или не имеет смысла, что товар существует без его бренда?

...