3

此链接描述了 Money 对象上的一个函数,用于将不同货币的资金加在一起。

首先我不想使用服务定位器模式。我目前使用的模式是不让 Money 对象自己进行转换。如果您尝试将不同的货币添加在一起,它就会抛出。

我有拥有Money 对象的对象(即MultiCurrencyAccount)处理Money 的数学运算。我的问题是我目前正在将 IMoneyConverter 注入 MultiCurrencyAccount 域对象的构造函数。这对我来说感觉很脏,因为 IMoneyConverter 实际上是一种服务,它反过来使用 IForeignExchangeService (这个可以访问数据库)。我知道我不应该关心实现,因为我正在处理抽象,但感觉很奇怪。

我不确定我是否离开基地并将服务注入我的域对象是“正确的”,或者是否有更优雅的方式来做到这一点。

4

1 回答 1

3

如果您将金钱视为价值对象(这很有意义),那么使用内置转换功能设计它们是非常诱人的。

但是,由于您参考了有关领域驱动设计的链接,您应该问自己这是否真的是建模 Money 的正确方法?

在大多数情况下,一捆美元不仅会神奇地变成等值的欧元。您必须将它们带到某个兑换站才能将您的美元兑换成欧元。一旦你这样做了,现在你有欧元,没有美元。如果之后汇率发生变化,不会影响您现在拥有的欧元数量。

我并不是说它总是会这样。最后,这取决于您的业务领域,但我认为如果您询问您的业务专家,您很可能会发现货币交易的业务规则与货币本身是脱钩的。如果是这种情况,将货币兑换建模为独立于价值对象的服务会更有意义。

于 2012-02-05T11:58:33.843 回答