Подтвердить что ты не робот

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

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

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

Это имеет смысл для домена, где у меня есть другие организации, такие как компании и т.д., которые имеют адрес?

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

4b9b3361

Ответ 1

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

Вот пример:

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

  • "Если я изменяю Company.Address, я хочу Person.Address для автоматического получения эти изменения "
  • "Если я изменяю Company.Address, это не должен влиять на Person.Address "

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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