Как конвертировать деньги на основе курсов валют в доменном объекте без размещения сервиса - PullRequest
3 голосов
/ 04 февраля 2012

Эта ссылка описывает функцию объекта Money для добавления средств в разные валюты.

Сначала я не хочу использовать шаблон Service Locator. В настоящее время я использую шаблон, при котором объект Money не выполняет само преобразование. Это просто бросает, если вы пытаетесь добавить разные валюты вместе.

У меня есть объект, которому принадлежат объекты Money (то есть MultiCurrencyAccount), обрабатывающие математические операции с Money. Моя проблема в том, что я в настоящее время конструктор, внедряющий IMoneyConverter в объект домена MultiCurrencyAccount. Мне это кажется грязным, поскольку IMoneyConverter действительно является службой, которая, в свою очередь, использует IForeignExchangeService (этот может попасть в БД) Я знаю, что мне не нужно заботиться о реализации, поскольку я имею дело с абстракцией, но это кажется странным.

Я не уверен, что я вне базы, и внедрение службы в мой доменный объект является «правильным» или есть более элегантный способ сделать это.

1 Ответ

3 голосов
/ 05 февраля 2012

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

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

В большинстве случаев пачка долларов США не просто волшебным образом превращается в их эквивалентную стоимость в евро. Вам нужно будет отвезти их на какой-нибудь обменный пункт, чтобы обменять ваши доллары на евро. Как только вы это сделали, теперь у вас есть евро, а не доллары. Если впоследствии обменный курс изменится, это не повлияет на количество евро, которое у вас сейчас есть.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...