Вот небольшая проблема
Иметь сущность со значением объекта. Не проблема. Я заменяю объект-значение новым, затем nhibernate вставляет новое значение и теряет значение старого, а затем удаляет его. Хорошо, это проблема.
Застрахованным является моя сущность в моем домене. У него есть коллекция адресов (объектов значения). Одним из адресов является MailingAddress. Когда мы хотим обновить почтовый адрес, скажем, почтовый индекс был неправильным, следуя доктрине г-на Эванса, мы должны заменить старый объект новым, так как он неизменный (верно, объект значения?).
Но мы не хотим удалять строку, потому что PK этого адреса является FK в таблице MailingHistory. Итак, следуя доктрине г-на Эванса, мы в значительной степени облажались. Если я не создаю адреса своих сущностей, мне не нужно «заменять» его и просто обновлять его член почтового индекса, как в старые добрые времена.
Что бы вы мне предложили в этом случае? На мой взгляд, ValueObjects полезны только тогда, когда вы хотите инкапсулировать группу столбцов таблицы базы данных (компонент в nhibernate). Все, что имеет постоянный идентификатор в базе данных, лучше сделать его сущностью (не обязательно совокупным корнем), чтобы вы могли обновлять ее элементы, не воссоздавая весь граф объектов, особенно если это объект с глубокой вложенностью.
Вы согласны? Разрешено ли мистеру Эвансом иметь изменяемый объект значения? Или объект изменяемого значения является кандидатом в сущность?
Спасибо