DDD: классифицировать сущность / объект значения - PullRequest
2 голосов
/ 16 марта 2012

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

Я знаю, что для определения объекта сущности / значения нам нужно опираться на контекст домена, в одном контексте один объект домена может быть сущностью, в другом - объектом значения, но все же есть некоторые ситуации, в которых я могу ' т решить

.e.g. адрес - В контексте приложения для управления клиентами (скажем, приложения для управления клиентами, добавления / удаления / изменения статуса и т. Д. Клиентов) адрес является явно ценным объектом, поскольку здесь нам не нужно различать один адрес от другого 2 клиента могут иметь один и тот же адрес - С другой стороны, могу ли я сказать, что в контексте приложения для онлайн-бронирования адрес является юридическим лицом? потому что теперь нам нужно дифференцировать клиентов по их платежному адресу (просто игнорируем случай 2 клиентов, имеющих один и тот же адрес)

Для меня адрес сам по себе уникален, поэтому он определенно уже имеет идентичность. Таким образом, идентичность доменного объекта не будет определять, является ли он сущностью или ценным объектом, и если да, то какие ключевые факторы будут выбраны?

Другой пример. У меня есть одно приложение, в котором перечислено несколько областей в одной стране, пользователь может выбрать одну область и найти все рестораны, которые соответствуют критериям поиска в этой области. В этом случае является ли область ценным объектом или сущностью? В настоящее время я думаю, что это больше о сущности, но все еще не очень уверен. Каждая область уникальна и

Я не уверен, ясен ли мой вопрос или нет, я изо всех сил стараюсь объяснить свое мышление в настоящее время

1 Ответ

6 голосов
/ 19 марта 2012

Я думаю, что некоторые из ваших трудностей могут заключаться в тонком значении некоторых из этих терминов.Например, вы упоминаете: «Для меня адрес сам по себе уникален, поэтому он определенно имеет идентичность».С точки зрения того, как большинство людей используют «идентичность» в доменном дизайне, ваше утверждение, вероятно, будет неверным.

Набор атрибутов объекта значения равен его определению.Если вы измените какой-либо аспект, у вас будет совершенно другой объект.Используя ваш пример адреса, если вы измените какую-либо его часть, вы получите совершенно другой адрес.Это не тот же адрес с измененными аспектами.Ваш клиент переехал на новый адрес;они не меняли аспекты одного и того же адреса.

Однако, если бы вы были картографическим приложением, а сам адрес изменился, то здесь адрес будет сущностью.При таком сценарии градостроители могут захотеть изменить нумерацию домов на улице.В этом случае тот же адрес изменяется.В этом случае нам нужно обновить сущность, а не объект значения.

Что касается вашего примера адреса выставления счета, адрес выставления счета, вероятно, все еще является объектом значения (по крайней мере, его частью физического адреса).Способ оплаты (например, кредитная карта) может быть объектом в этом примере, и он может включать в себя другие объекты стоимости (например, адрес для выставления счета, номер кредитной карты и т. Д.).

Может оказаться полезным просмотреть обзорэтот вопрос и ответы на него: Значение по сравнению с объектами Entity (Domain Driven Design)

Надеюсь, это поможет.Удачи!

...