2015-09-02 2 views
6

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

ответ

3

Определение довольно прямо вперед:

  • Совокупные: В основном кластер объектов, которые создают четкую ссылку на корневой агрегате, так, когда вы ссылаетесь на корень, вы можете гарантировать целостность агрегатов в целом.

Агрегат - это образец в режиме управляемого доменом. Агрегат DDD представляет собой кластер объектов домена , который можно рассматривать как единое целое. Пример может быть порядком и его позициями, они будут отдельными объектами , но полезно обрабатывать заказ (вместе со своей строкой ) как единый агрегат.

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

Агрегаты - это основной элемент передачи данных - вы запрашиваете загрузку или сохранение целых агрегатов. . Транзакции не должны составлять .

DDD Агрегаты иногда путаются с классами сбора (списки, карт и т. Д.). Агрегаты DDD - это концепции домена (заказ, посещение клиники, плейлист ), а коллекции - общие. Агрегат часто будет содержать коллекцию mutliple вместе с простыми полями. Термин «совокупность» является общим и используется в различных контекстах (например, UML), и в этом случае он не относится к той же концепции, что и агрегат DDD .

  • Сущность: В контексте модели данных, описывает структуру данных, независимо от сохраненной формы.

ЭДЙ решает проблемы, возникающие из наличия данных, хранящихся в многих формах. Например, рассмотрите бизнес, который хранит данные в реляционных базах данных, текстовых файлах, XML-файлах, электронных таблицах и . Это создает серьезные проблемы при моделировании данных, дизайн приложения и доступ к данным. При разработке ориентированного на данные приложения задачей является создание эффективного и поддерживаемого кода без ущерба для эффективного доступа к данным, хранения и масштабируемости. Когда данные имеют реляционную структуру, доступ к данным, память и масштабируемость очень эффективны, но писать эффективный и обслуживаемый код становится сложнее. Когда данные имеют структуру объекта, компромиссы меняются на противоположные. Написание эффективного и обслуживаемого кода приходит за счет эффективного доступа к данным, их хранения и масштабируемости.Даже если , если правильный баланс между этими компромиссами может быть найден, возникают новые проблемы , когда данные перемещаются из одной формы в другую. Модель данных сущностей решает эти проблемы, описывая структуру данных в терминах сущностей и отношений, которые являются независимо от любой схемы хранения. Это делает сохраненную форму данных нерелевантной для разработки и разработки приложений. И, поскольку сущности и отношения описывают структуру данных, так как это , которые используются в приложении (а не в его сохраненной форме), они могут развиваться по мере того, как приложение развивается.

Определение может отличаться, определение определено Martin Fowler и Microsoft. Надеюсь, это еще раз поясняет разницу.

+0

Да, немного ... спасибо @Greg за ваш ответ. –

+1

Определение для обоих, к сожалению, используется взаимозаменяемо, что может сбивать с толку, но это то, что на самом деле означает каждый. – Greg

18

С точки зрения перспективного развития домена DbContext является реализация UnitOfWork, а DbSet<T> - это реализация репозитория.

В этом отличие от DDD и EntityFramework. DDD предлагает иметь репозиторий на один корневой узел, но EntityFramework создает по одному для каждого объекта.

Итак, что представляет собой совокупный корень?

Предположим, что у нас есть социальная сеть и есть объектов like Post, Like, Comment, Tag. (Я полагаю, что вы можете себе представить отношения между этими объектами). Некоторые из объектов «Агрегатный корень»

Чтобы найти общий корень, я пытаюсь найти, какие сущности не могут жить без другого. Например, Like или Comment не могут жить без Почты. Затем Post является совокупным корнем, и нам нужен PostRepository или превратить объект Post в репозиторий (известная коллекция, например, предмет интерфейса). Операции CRUD для комментариев и комментариев (как и Post) должны оставаться в этом репозитории.

+1

Хороший ответ и определение, гораздо более функциональное определение, а не мое определение теории. – Greg

+3

«DDD предлагает иметь репозиторий на совокупность ...» отличная и недоиспользуемая концепция IMHO. –

+0

@Mehmet Отличное описание. Именно картина у меня была из совокупных корней. Я думал, что это возможно с сущностями базы данных, сгенерированными с использованием структуры сущности, в отношении внешних ключей и первичных ключей. Было бы разумным позволить сущностной структуре генерировать объекты для проекта, управляемого доменом? или вручную построить один? ..... Наконец, как я могу сохранить агрегатные корни в базе данных? –

Смежные вопросы