在确定某事物是实体还是价值对象时,应该忽略唯一性吗?

时间:2019-06-01 02:03:12

标签: entity domain-driven-design aggregateroot value-objects

唯一性是否被视为DDD中的持久性问题?

我问的原因是因为我在订单引用上下文中有一个Customer对象。例如订单是针对客户的,客户必须支付一定的费用。

从技术上讲,我不允许客户使用相同的代码或名称。这意味着如果我有两个具有相同代码和名称的Customer对象,它们将始终像值对象一样被对待。

但本能地,Customer感觉像是一个实体。是唯一的约束使我失望,还是我认为这是一个价值对象?

订单报价上下文也将允许从管理页面添加/编辑/删除客户。造成这种混乱的原因吗?管理页面是否应该属于Customer是实体的另一个上下文的一部分,并且订单引用上下文将使用Customer作为值对象?

1 个答案:

答案 0 :(得分:0)

这是一个很好的问题,您已经部分回答了,您的客户是您管理范围内的实体。

确定对象是否为实体的良好经验法则是用身份的概念来思考。如果您的对象要求的身份与时光相同,即使此人的姓名或联系方式可以更改,那么它很可能是实体。

但是,在定义了该概念的情况下,您可以拥有一个CustomerId,该ID由业务角度(由您自己决定的代码和名称)组成。

此客户ID不是技术ID,而是业务ID,您实体的身份就是该ID。然后,在“订单报价”有限的上下文中,您可以使用同一对象(可能是在共享上下文中的某个位置定义,或者通过复制代码来引用您的客户:在DDD中可以复制某些代码以促进松散耦合)。