Как объекты значения хранятся в базе данных?
На самом деле я не видел никаких примеров, но я предполагаю, что они сохраняются внутри таблицы сущностей в базе данных.
То есть. Если у меня есть сущность Person / агрегатный корень и соответствующая таблица Person, если у нее есть Объект значения с именем Address, значения Address будут сохранены в этой таблице Person!
Имеет ли это смысл для домена, где у меня есть другие объекты, такие как компании и т. Д., Которые имеют адрес?
(Я сейчас пишу приложение для управления проектами и пытаюсь попасть в DDD)
3 ответа
Можно хранить объекты-значения в отдельной таблице по тем же причинам, которые вы описали. Тем не менее, я думаю, что вы неправильно понимаете сущности против виртуальных организаций - это не проблема, связанная с постоянством.
Вот пример:
Предположим, что Компания и Лицо имеют одинаковый почтовый адрес. Какие из этих утверждений считают действительными?
- "Если я изменю Company.Address, я хочу, чтобы Person.Address автоматически получал эти изменения"
- "Если я изменяю 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) является местом их выражения.
Это просто мое чувство:)
Я думаю, что интересно читать это тоже: