В обход совокупного корня - PullRequest
2 голосов
/ 14 июля 2009

Можно ли получить коллекцию только для чтения из агрегата, не проходя через корень, чтобы получить ее? Моя модель делает это прямо сейчас, и мне было интересно, приемлемый ли это дизайн. Спасибо

Редактировать:

Вот пример

У меня есть совокупный корневой объект с именем UserAccount и другой совокупный корневой объект под названием VideoStore. Пользователи могут иметь несколько магазинов, в которых они находятся отдельно, а магазины видео могут иметь много пользователей. Очень базовая структура «многие ко многим», но это не потому, что таблица мостов «многие ко многим» содержит информацию о состоянии, поэтому она также должна быть сущностью. Итак, у меня есть объект-мост под названием UserVideoStores и его дочерний элемент совокупного корневого VideStore (один-ко-многим).

Теперь, когда пользователь входит в систему, я хочу посмотреть, к каким VideoStores он принадлежит, и отобразить эту информацию для него. Я легко могу сделать это, заставив сущность UserAccount иметь прямую (один-ко-многим) ссылку на дочерний объект UserVideoStores совокупного корневого VideoStores. Кажется, проще сделать это, затем использовать запрос HQL и выполнить поиск снизу вверх, чтобы найти, в каких хранилищах находится пользователь.

Имеет ли это смысл?

Edit:

Ну, я придумала решение сделать мою модель чище. Я не задумывался о некоторых своих проектах и ​​научился немного лучше использовать nHibernate, чтобы помочь мне найти решение. Спасибо

Ответы [ 2 ]

2 голосов
/ 22 января 2010

На самом деле Эрик изменил свое мнение о строгости совокупных корневых правил.
Недавно он сказал что-то вроде

"Расслабься, чувак. Попытайся помешать себе нарушить правила, чувак. Но, эй, не бей себя из-за этого. DDD качает чувак, но нарушай правила Agg, если тебе действительно нужно. «

См: «Эрик Эванс: что я узнал о DDD со времени выхода книги» http://dddcommunity.org/library/evans_2009_1

2 голосов
/ 14 июля 2009

Эванс говорит: «Корень - единственный член AGGREGATE, на который внешним объектам разрешено хранить ссылки ...» (стр. 127)

Насколько я понимаю, агрегат должен выглядеть как единое целое с внешними объектами. Кроме того, Закон Деметры , кажется, применим. Итог, я не думаю, что это приемлемо.

...