值对象可以有行为吗?

Can Value Object have behaviour?

我有一个值对象 - Money 和 ExchangeRatio。我想使用 ExchangeRatio 将一种货币转换为另一种货币。那么像这样在 Value Object ExchangeRatio 上构建一个转换行为是不是很好:

ExchangeRatio.Convert(金钱)returns金钱。

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

在我看来,你所做的一切都合情合理。 Eric Evans 在他的书中使用了一个 Paint 对象的例子来做同样的事情。 mixIn 方法将另一个 Paint 对象作为输入,并 returns 一个新的 Paint 对象。

他使用 Paint 示例演示了书中的 无副作用函数