Что касается книги Эрика Эванса Domain Driven Design: Tackling Complex In The Heart of Software, ключевым атрибутом объекта значения является то, что они часто являются временными (т. Е. Недолговечными) , созданный для конкретной операции, а затем отброшенный. Если вы используете языки программирования, которые не имеют встроенного механизма автоматической сборки мусора (например, C, C ++), вам придется вручную освобождать их память в конце их жизненного цикла. В противном случае вам не понадобится какая-либо сверхмощная реализация для управления ими. (Эрик Эван тоже говорил о сборке мусора, сравнивая Entities
и Value Objects
.)
Аспект неизменяемости объектов значений просто означает, что после создания ни один из их атрибутов не может быть изменен, кроме как путем полной замены всего объекта. Таким образом, если два Person
объекта совместно используют один и тот же объект значения Address
и один из них изменяет свой адрес, будет создан новый отдельный объект значения Address
для представления нового адреса.
Конечно, это не твердое правило. Законные случаи для объектов изменяемых значений включают:
- Если объекты значений часто меняются,
- Процессы их создания и / или удаления требуют больших вычислительных ресурсов,
- Их замена (вместо модификации) нарушает стабильность системы,
- и Т. Д.
Другой аспект объектов-значений заключается в том, что они не имеют концептуальной идентичности. Но это не значит, что у них не может быть низкоуровневых идентификаторов, таких как столбец, помеченный как их первичный ключ в реляционной базе данных. Эрик Эванс также говорил об ассоциации между сущностями и объектами-ценностями. Итак, если вы решили разделить объект Address
value между двумя Person
сущностями, вы можете определить, существует ли уже адрес, запросив базу данных или любую другую общую структуру данных в памяти, доступную для сущностей.
person
ivan.sim
schedule
31.12.2014