DDD: модель локальной идентичности в объединенном корне - PullRequest
3 голосов
/ 26 сентября 2011

После прочтения синей книги (Эрик Эвана «Управление по доменам») и начала применения концепций DDD в простом приложении, похожем на блог, у меня возникает следующий вопрос: как вы моделируете локальную идентичность сущности внутри совокупного корня ??

Допустим, для простоты у меня есть простая модель блога, которая имеет следующие сущности и сценарии: зарегистрированный пользователь может публиковать сообщение, сообщение может иметь один или несколько тегов, а также зарегистрированного или незарегистрированного пользователяможет публиковать комментарий к сообщению.

В этом сценарии сущностями являются Пользователь, Публикация и Комментарий, корнями-агрегатами являются Пользователь-нет.Итак, поскольку сущность комментария имеет локальную идентичность внутри Post, как мне смоделировать ее локальную идентичность ??То есть я не могу дифференцировать комментарий только по его атрибутам, поскольку у меня могут быть два разных комментария для одного и того же поста, опубликованные одним и тем же пользователем с одинаковым содержанием ...

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

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

Спасибо, Пабло

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

Хороший вопрос.Из книги Эрика Эвана:

СУЩНОСТИ внутри границы имеют локальную идентичность, уникальную только в пределах AGGREGATE.

... напрямую могут быть получены только AGGREGATE корнис запросами к базе данных.Все остальные объекты должны быть найдены путем обхода ассоциаций.

Я думаю, что вторая часть важна.Вы должны трактовать Идентификатор комментария как локальный идентификатор.Другими словами, вы не должны извлекать комментарии, минуя его совокупный корень (сообщение), ссылочные комментарии извне и т. Д. Технически, Commend Id может быть тем же полем AUTOINCREMENT, сгенерированным базой данных, как и для User и Post (или любым другим идентификаторомгенератор из спящего режима).Но концептуально комментарий будет иметь локальную идентичность.Задача Совокупного Корня состоит в том, чтобы решить эту проблему.

2 голосов
/ 05 октября 2011

Я не эксперт по DDD, но я бы поспорил, что, возможно, Comment должен быть ценностным объектом.Ценный объект не имеет «концептуальной идентичности», но он, безусловно, может иметь персистентную идентичность.Обычно вы предпочитаете использовать объекты-значения, а не сущности, потому что у последних обычно больше накладных расходов.

Не путайте идентичность персистентности с концептуальной идентичностью.Сначала мне было трудно это понять.

...