Как обрабатывать объект значения, ссылающийся на сущность? - PullRequest
0 голосов
/ 15 сентября 2018

Я только начал изучать DDD и пытаюсь разобраться в некоторых сценариях.

У меня есть Product (Entity) с ProductName (Value Object) и ProductPrice (Value Object).У цены продукта тогда есть сумма (десятичная) и валюта.

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

Но теперь у меня есть объект значения (цена продукта), ссылающийся на сущность (валюта).Как это должно быть обработано?Мое предположение (я не уверен) заключается в том, что я удаляю ссылку на сущность валюты внутри цены продукта и вместо этого добавляю идентификатор валюты (доллары США, евро и т. Д.).Валюта тогда становится своей собственной совокупностью.

Является ли это допустимым и предпочтительным дизайном в DDD, или это должно быть сделано другим способом?

1 Ответ

0 голосов
/ 15 сентября 2018

В оригинальной книге DDD Эванс обсуждал возможность иметь значения, которые могут ссылаться на сущности.(Глава 5: «ЦЕННЫЕ ОБЪЕКТЫ могут даже ссылаться на СУЩНОСТИ»)

Я думаю, что все в общем и целом отказались от этой практики.Неизменность - это слишком мощная идея.Значения обычно ссылаются только на другие значения.Вместо того, чтобы ссылаться на сущность, мы включаем идентификатор сущности .

. Таким образом, обычное решение состоит в том, что вы моделируете код валюты как значение и сохраняете (копии) этого значения в своемЗначение цены.

Денежная единица становится ее собственной совокупностью.

Я бы не ожидал, что это произойдет.Как валюта меняется со временем?

Я думаю, вы обнаружите, что валюта довольно статична: со временем меняется CurrencyExchange - какие валюты в настоящее время перечислены?какой курс сегодня?Каким был обменный курс два года назад?Какие политические единицы предпочитают эту валюту по состоянию на четверг?

Валюты по своей природе ближе к единицам измерения: футы, дюймы, метры, фунты, литры секунд.Метры - это единица измерения длины;Валюта - это единица измерения в измерении «деньги».

Как вы справляетесь с тем, что новые валюты могут быть добавлены в систему, и как вы можете выбирать между валютами в GUI?

Есть два возможных ответа на этот вопрос.

Если ваш домен является органом, для которого валюты активны в системе, то реестр валют / обмен валюты должен быть организацией первого класса вмодель вашего домена и управляет процессом изменения перечисленных валют.

Если ваш домен является , а не полномочным органом, то вы просто кэшируете копию информации, которую вы получаете от этого уполномоченного органа.Кэши обычно CRUD (PUT, GET, DELETE, возможно PATCH).

...