【发布时间】:2012-02-26 15:39:33
【问题描述】:
This link 描述了 Money 对象上的一个函数,用于将不同货币的资金相加。
首先我不想使用服务定位器模式。我目前使用的模式是不让 Money 对象自己进行转换。如果您尝试将不同的货币添加在一起,它就会抛出。
我让拥有 Money 对象的对象(即 MultiCurrencyAccount)处理 Money 上的数学运算。我的问题是我目前正在将 IMoneyConverter 注入 MultiCurrencyAccount 域对象的构造函数。这对我来说感觉很脏,因为 IMoneyConverter 实际上是一种服务,它反过来使用 IForeignExchangeService (这个可以访问数据库)。我知道我不应该关心实现,因为我正在处理一个抽象,但感觉很奇怪。
我不确定我是否偏离基础并将服务注入我的域对象是“正确的”,或者是否有更优雅的方法来做到这一点。
【问题讨论】:
-
直截了当:您想要添加不同货币的货币(例如美元和欧元)。您有一项服务(MultiCurrencyAccount),它使用
IMoneyConverter将不同的货币转换为目标货币。IMoneyConverter的实现使用IForeignExchangeService来查找兑换的汇率。听起来很合理,尽管当您的IForeignExchangeService已经进行转换时,我不确定您是否真的需要转换器。 -
塞巴斯蒂安,你说得很对。 IForeignExchangeService 的原因是它只是提供费率,而 IMoneyConverter 实际上包含转换数学。
标签: dependency-injection domain-object