如何区分实体和 ValueObject ?
对于我最近使用DDD的项目,我经常对两者感到困惑。
答案 0 :(得分:0)
我还希望这是一种简单的经验法则,用于确定您的新模型是Entity
还是ValueObject
?
我个人使用以下问题:
我的模型中是否有任何属性,它的历史变化很重要?
Entity
ValueObject
因此,在示例中使用它,Person
模型取决于我们的域(逻辑/商务),它的历史FirstName
属性可能重要或不重要。如果是,则Person
为Entity
。
另一方面,我们必须能够为updatable = false
属性设置ValueObject
。当需要更新时,我们只需删除以前的记录并插入新记录[1]。
关于你的其他问题,我认为关于DDD最大的一点就是将逻辑隔离到域/模型层。 "易于测试的简单POJO"。因此,您可以轻松地将任何逻辑添加到您的域/模型中,只需单元测试即可。
我希望我的答案有一些用处,如果你找到更方便区分这两个人的话,请告诉我! :^)
[1]如果ValueObject
位于关系的多方面,那么我们需要检查是否所有(单方)引用都需要更新。如果没有,那么我们按原样保留当前记录,然后插入新记录(对于那些需要更新的引用)。