2016-12-20 7 views
4

Я новичок в мире DDD, я хочу применить его к нашему DDD-приложению с ADO.NET. В DDD есть объекты, агрегированный корень, объект значения. У меня есть два объекта, например блог, которые могут принадлежать нескольким категориям. На самом деле, я думаю, что сообщение в блоге и категория все должны быть объединенными. Сообщение в блоге и категория все имеют репозиторий, PostRepository и CategoryRepository, но теперь я смущен о том, как реализовать постоянство отношений 1: много между объектами post и category.DDD как сохранить отношения между объектами?

В шаблоне DAO существует DAO, соответствующий таблице, мы можем сохранить связь в классе DAO. Но в DDD существует концепция Единицы работы, она может обеспечить правильную работу агрегатного корня, например, должны быть некоторые репозитории об объектах совокупного корня. но для отношений я не думаю, что у него должен быть репозиторий, это не сущность здесь.

Есть ли наилучшая практика для решения этих сценариев? или я должен добавить две процедуры (добавить сообщение, добавить категорию) и вызвать их, когда я сохраню сообщение?

+0

Возможный дубликат [В чем разница между шаблонами DAO и репозитория?] (Http://stackoverflow.com/questions/8550124/what-is-the-difference-between-dao-and-repository-patterns) – guillaume31

ответ

2

У вас должен быть один репозиторий для каждого заполнителя.

Если вы думаете о структуре объектов, таких как ваши сообщения, то агрегированием будет сообщение с категорией. Почта будет совокупным корнем. Если сущность сама по себе, вы можете думать о ней как об агрегированном корне в себе (всего лишь совокупность одного объекта). Таким образом, ваши правила создания репозиториев - это один для каждого совокупного корня (или отдельных объектов одного объекта).

Если вы делаете Категорию частью агрегата Post, то вы никогда не должны напрямую обращаться к категориям или изменять их. Если Категория нуждается в изменении, это делается через объект Post. Если это не похоже на вашу модель домена, и вы думаете: «но я хочу управлять своими категориями отдельно», тогда есть хорошая вероятность, что Категория не относится к агрегату Post. Если нет, вы, вероятно, захотите моделировать категорию как свою собственную сущность и ссылаться на нее по id (а не ссылке на объект) из объекта Post.

Как вы затем перейдете к категории Категории зависят от вашего собственного Домена. Это происходит с DDD. Но все хорошо. Это просто означает, что способ моделирования вашего домена на 100% зависит от того, как работает ваш конкретный домен.

+0

Спасибо Адриан, здесь я буду управлять этой категорией отдельно. Я использую таблицу для хранения отношений, к которым относится категория, в DDD с инфраструктурой сущности, это будет сделано автоматически, если без ORM существует ли элегантный шаблон для сохранения сообщения и его категорий? – RonSmith

+0

Вы можете просто использовать что-то вроде ADO.NET, сначала удалив существующие ссылки, а затем снова вставьте их. –