Domain driven design 价值对象会有行为吗?

Domain driven design 价值对象会有行为吗?,domain-driven-design,value-objects,Domain Driven Design,Value Objects,我有一个很有价值的东西——货币和外汇。我想用外汇兑换成另一种货币。因此,在值对象ExchangeRatio上构建转换行为是否很好,如下所示: 兑换(货币)返回货币 或者我应该把它委托给某个域服务吗?换言之,我能否在价值对象上建立一种行为,这种行为不会改变其状态,但其中包含一些逻辑、数学或其他不同的对象创建(基于其状态)?你所做的对我来说完全合理。Eric Evans在他的书中使用了一个绘画对象的例子,它做了同样的事情。mixIn方法将另一个Paint对象作为输入,并返回一个新的Paint对象 通

我有一个很有价值的东西——货币和外汇。我想用外汇兑换成另一种货币。因此,在值对象ExchangeRatio上构建转换行为是否很好,如下所示:

兑换(货币)返回货币


或者我应该把它委托给某个域服务吗?换言之,我能否在价值对象上建立一种行为,这种行为不会改变其状态,但其中包含一些逻辑、数学或其他不同的对象创建(基于其状态)?

你所做的对我来说完全合理。Eric Evans在他的书中使用了一个
绘画
对象的例子,它做了同样的事情。
mixIn
方法将另一个
Paint
对象作为输入,并返回一个新的
Paint
对象


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

好的,因为Paint只知道他行为中的Paint实例。在这里,ExchangeRatio了解货币,所以情况不同。我将把convert方法放在Money对象上,因为您使用的是货币,而不是ExchangeRatio。因此,
Money.ConvertTo(ExchangeRatio)
好吧,Radek,
Paint
的进一步重构包括了
颜料
。因此,
Paint
了解颜料并在内部使用比例。因此,只要关闭业务运营,我们就应该是好的。不管怎么说,正如SneekyPeet所提到的,您可以稍微改变一下,因为您的示例实际上看起来更像是一个域服务;)--不过,答案仍然成立:你可以在你的VO上有行为。