Как объекты Value хранятся в базе данных?


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

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

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

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

3   51  

3 ответа:

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

вот пример:

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

  1. " если я изменю компанию.Адрес, я хочу Человек.Адрес автоматически получать эти изменения"
  2. " если я изменю компанию.Адресовать его не должно влиять на человека.Адрес"

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

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

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

большинство разработчиков, как правило, думают в базе данных, прежде чем что-либо еще. DDD не знает о том, как обрабатывается персистентность. Это зависит от хранилища, чтобы справиться с этим. Вы можете сохранить его как xml, sql, текстовый файл и т. д. Сущности / агрегаты / объекты значений-это понятия, связанные с доменом.

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

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

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

overidded метод равен или / и sameIdentityAs / SameValueAs (от interface Entity и ValueObject) являются, Я думаю, местом их выражения.

Это просто мое чувство:)

Я думаю, что интересно прочитать это тоже:

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