Я до сих пор понял, что я понимаю, что объекты объектов имеют идентификатор, а объект значения - нет, но в наиболее распространенном примере у вас есть объект-человек, к которому прикреплен объект значения адреса. В чем преимущество создания отдельного адресного объекта вместо сохранения свойств адреса в объекте Person?
В DDD, каковы фактические преимущества объектов ценности?
Ответ 1
В дополнение к уже упомянутым вещам, Грег Янг делает большой вывод из того, что, поскольку они неизменяемы, вы можете их проверить на создание и никогда не беспокоиться о проверке снова. Если состояние не может быть изменено, вы всегда знаете, что оно действительно.
Ответ 2
- Объекты Value могут использоваться как аргументы для других методов в других классах
- Это может сделать ваш дизайн более четким.
- Это может помочь в оптимизации производительности (пример: шаблон fly-weight)
- Объекты Value могут использоваться повторно в разных объектах. (пример: пользовательские и локальные объекты с объектами значения адреса.
Не забывайте, что "не имеющий идентификатора" не является единственной разницей между объектами ценности и объектами, неизменяемым также очень важно.
Ответ 3
Подумайте об этом как о компоненте многократного использования. Вы можете внести его в домашний адрес, рабочий адрес без особых дополнительных усилий. Вы можете использовать его для развязки других систем от лица. Скажите, что вы вводите бизнес-объект. Он также будет иметь адрес.
Связанный с этим предметом другой важный вопрос: состав против наследования