2014-12-31 7 views
2

Я пытаюсь понять концепцию объекта ценности. Один из аспектов объекта ценности является неизменным. Я хотел бы знать, что мы должны реализовать вещь, которая управляет объектом ценности? Например, Person является сущностью, а Address является объект value. У двух человек одинаковый адрес.Domain Driven Design - объект значения неизменяемый

  1. + Можно ли назначить один и тот же адрес экземпляра для каждого человека?
  2. + Как мы узнаем, что адрес уже существует, поэтому нам не нужно создавать новые?
  3. + Как мы управляем объектами ценности?

Я не понимаю, насколько я могу понять неизменный аспект правильно или нет. Не могли бы вы посоветовать мне по этому поводу?

ответ

2

со ссылкой на Domain Driven Design Эрик Эванс: Отбор сложности в сердце программного обеспечения, ключевой атрибут объекта значения является то, что они часто переходная (т.е. недолговечны), созданный для конкретной операции и затем отбрасывается. Если вы используете языки программирования, у которых нет встроенного механизма автоматической сборки мусора (например, C, C++), вам придется вручную освобождать свои воспоминания в конце их жизненного цикла. В противном случае вам не нужно выполнять какую-либо сверхпрочную реализацию для их управления. (Eric Evan говорил о сборке мусора при сравнении Entities и Value Objects тоже.)

неизменен аспект объектов значений просто означает, что когда-то создал, ни один из их атрибутов не может быть изменен только путем полной замены всего объекта. Поэтому, если два объекта Person имеют один и тот же объект значения Address, и один из них меняет свой адрес, для представления нового адреса будет создан новый отдельный объект значения Address.

Конечно, это не твердое правило. Законные футляры для объектов изменяемых стоимостей включают:

  1. Если объекты значений часто меняются,
  2. Их процессы создания и/или удалений вычислительно дорогие,
  3. Их замена (вместо модификации) нарушение стабильности система,
  4. т.д.

Другой аспект объектов значений является то, что они имеют не концептуальная идентичность. Но это не означает, что они не могут иметь низкоуровневые идентификаторы, такие как столбец, помеченный как их первичный ключ в реляционной базе данных. Эрик Эванс также рассказал об ассоциации между объектами и объектами ценности. Поэтому, если вы решили использовать объект значения Address между двумя объектами Person, вы можете определить, существует ли адрес, запрашивая базу данных или любую общую структуру данных в памяти, доступную для объектов.

 Смежные вопросы

  • Нет связанных вопросов^_^