Как объекты значения хранятся в базе данных? - PullRequest
54 голосов
/ 24 марта 2009

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

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

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

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

Ответы [ 3 ]

105 голосов
/ 25 марта 2009

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

Вот пример:

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

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

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

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

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

11 голосов
/ 04 октября 2012

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

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

2 голосов
/ 15 августа 2015

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

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

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

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

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

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

...