Вопрос

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

Т.е.Если у меня есть корневая сущность/агрегат Person и соответствующая таблица Person, если бы у нее был объект Value с именем Address, значения адреса были бы сохранены внутри этой таблицы Person!

Имеет ли это смысл для домена, где у меня есть другие объекты, такие как компании и т. д.у которых есть адрес?

(Сейчас я пишу приложение для управления проектами и пытаюсь проникнуть в DDD)

Это было полезно?

Решение

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

Вот пример:

Предположим, что Компания и Человек у обоих одна и та же почта Адрес.Какое из этих утверждений считать справедливым?

  1. «Если я изменяю компанию. Address, я хочу, чтобы Person.dress автоматически получил эти изменения»
  2. «Если я изменяю company.address, это не должно влиять на человека.

Если 1 правда, Адрес должно быть Сущность, и поэтому имеет собственную таблицу

Если 2 правда, Адрес должно быть Объект значения.Он может храниться как компонент в таблице родительского объекта или иметь собственную таблицу (лучшая нормализация базы данных).

Как видите, способ сохранения адреса не имеет ничего общего с семантикой Entity/VO.

Другие советы

Большинство разработчиков склонны в первую очередь думать о базе данных, прежде чем обо всем остальном.DDD не знает, как обрабатывается постоянство.Репозиторий должен разобраться с этим.Вы можете сохранить его как XML, sql, текстовый файл и т. д. и т. п.Объекты сущностей/агрегатов/значений — это концепции, относящиеся к предметной области.

Объяснение Виджая Пателя идеально.

Я начал изучать DDD на примере книги Эрика Эванса и превосходного проекта dddsample Cargo. http://dddsample.sourceforge.net/

Так что для тех (как я), кто хочет материализовать разницу в реализации кода этого нюанса на уровне модели предметной области, я бы сказал:

Переопределенный метод Equals или/и SameIdentityAs/SameValueAs (из интерфейса Entity и ValueObject), я думаю, является местом их выражения.

Это просто мое ощущение :)

Мне тоже кажется интересно это прочитать:

http://martinfowler.com/bliki/ValueObject.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top