со ссылкой на Domain Driven Design Эрик Эванс: Отбор сложности в сердце программного обеспечения, ключевой атрибут объекта значения является то, что они часто переходная (т.е. недолговечны), созданный для конкретной операции и затем отбрасывается. Если вы используете языки программирования, у которых нет встроенного механизма автоматической сборки мусора (например, C, C++), вам придется вручную освобождать свои воспоминания в конце их жизненного цикла. В противном случае вам не нужно выполнять какую-либо сверхпрочную реализацию для их управления. (Eric Evan говорил о сборке мусора при сравнении Entities
и Value Objects
тоже.)
неизменен аспект объектов значений просто означает, что когда-то создал, ни один из их атрибутов не может быть изменен только путем полной замены всего объекта. Поэтому, если два объекта Person
имеют один и тот же объект значения Address
, и один из них меняет свой адрес, для представления нового адреса будет создан новый отдельный объект значения Address
.
Конечно, это не твердое правило. Законные футляры для объектов изменяемых стоимостей включают:
- Если объекты значений часто меняются,
- Их процессы создания и/или удалений вычислительно дорогие,
- Их замена (вместо модификации) нарушение стабильности система,
- т.д.
Другой аспект объектов значений является то, что они имеют не концептуальная идентичность. Но это не означает, что они не могут иметь низкоуровневые идентификаторы, такие как столбец, помеченный как их первичный ключ в реляционной базе данных. Эрик Эванс также рассказал об ассоциации между объектами и объектами ценности. Поэтому, если вы решили использовать объект значения Address
между двумя объектами Person
, вы можете определить, существует ли адрес, запрашивая базу данных или любую общую структуру данных в памяти, доступную для объектов.