Комментарии 21
Второй недостаток здесь в том, что мы потенциально можем отделить объект-значение от родителькой сущности. Address может жить собственной жизнью, т.к. мы можем удалить Person из БД без удаления соответствующей строки Address
Для этого придумали каскадное удаление в частности и правила удаления по внешнему ключу в целом.
А что если в объекте-значении Address 100 полей? Заинлайнить все?
В вопросе объектов-значений и сущностей важное значение имеет следующее правило: всегда предпочитайте объекты-значения сущностям.Это противоречит самому духу DDD. DDD призывает строить дизайн приложения исходя из предметной области. Т.е. выбор Entity vs Value Object делается исходя из уникальности\неуникальности.
У вас прям сборник вредных советов какой-то получился.
Объекты-значения не должны иметь собственной таблицы в БД.
Аналогичный вопрос рассматривается в известной книге, а именно в пятой главе. Если коротко, то никаким образом наличие или отсутствие поля id не делает что-то сущностью или обьектом-значением. Речь там идет о том, чтобы не добавлять лишних идентификаторов и не усложнять работу с обьектами-значениями без необходимости.
А вот наличие или отсутствие поля с семантикой главного идентификатора (=первичного ключа) как раз и разделяет сущности и объекты-значения.
На уровне объектов поля. Первичный ключ в таблице может и не проецироваться на поле объекта вовсе, или проецироваться (скажем, из-за особенностей ORM), но не участвовать в бизнес-логике, прежде всего в логике сравнения объектов-значений одного типа с другим, если нет гарантий "синглтонности" таких объектов для каждого значения, для каждого сочетания бизнес-полей.
понравилась систематизации разницы между Entity и VO - именно то, что я и искал
Entity vs Value Object: полный список отличий