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

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

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

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

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

3 ответа

Решение

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

Вот пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам