价值对象可以有行为吗?

Rad*_*dek 5 domain-driven-design value-objects

我有一个价值对象-金钱和ExchangeRatio。我想使用ExchangeRatio将一种货币转换为另一种。因此,在Value Object ExchangeRatio上构建转换行为是一件好事,如下所示:

ExchangeRatio.Convert(Money)返回钱。

还是应该将其委托给某些域服务?换句话说,我可以在不改变其状态但具有某种逻辑,数学或其他不同对象创建方式(基于其状态)的价值对象上构建行为吗?

Ebe*_*oux 4

你所做的事情对我来说听起来完全合理。Paint埃里克·埃文斯 (Eric Evans)在他的书中使用了一个具有相同功能的对象示例。该mixIn方法接受另一个Paint对象作为输入并返回一个新Paint对象。

Paint他通过示例演示了书中的无副作用函数。

  • 我会将转换方法放在货币对象上,因为您正在使用货币,而不是 ExchangeRatio。因此 `Money.ConvertTo(ExchangeRatio)` (3认同)
  • 好吧,Radek,进一步重构“Paint”以包含“Pigment”。因此“Paint”“了解”颜料并在内部使用比例。因此,只要“关闭运营”业务继续存在,我们就应该表现良好。不管怎样,正如 SneekyPeet 提到的,你可以稍微交换一下,因为你的例子实际上看起来已经更像一个域服务了;)——但答案仍然成立:你*可以*在你的 VO 上有行为。 (3认同)