我正在阅读"领域驱动设计的模式,原则和实践"。该书建议Entity
的属性应该是值对象,以便模拟域的普遍性语言。我见过很多例如EmailAddress
或Age
的例子,只有一个字段来模拟域概念。我很困惑。 Entity
的每个属性都是值对象吗?当我们可以使用普通语言为属性提供数据类型时,您能提供示例吗?
答案 0 :(得分:6)
不,实体的每个属性都不是值对象。
实体的属性是以下之一:
答案 1 :(得分:2)
我认为你真正的问题是:每个价值对象都是一个类吗? 因为你可以认为对于Age来说,Java Integer就足够了,这是真的。所以你在你的实体Person中有一个值对象Age类型为Integer,不需要年龄类型。
OOP还说对象是状态+行为。在你的Age情况下,我认为它没有行为,所以一个简单的原语或包装类就可以做到这一点,事实上我会选择这个因为更简单。
我的建议是,使用原始/包装类,如果你宣传该值对象需要某些行为,请创建一个类/类型。