唯一性是否被视为DDD中的持久性问题?
我问的原因是因为我在订单引用上下文中有一个Customer
对象。例如订单是针对客户的,客户必须支付一定的费用。
从技术上讲,我不允许客户使用相同的代码或名称。这意味着如果我有两个具有相同代码和名称的Customer
对象,它们将始终像值对象一样被对待。
但本能地,Customer
感觉像是一个实体。是唯一的约束使我失望,还是我认为这是一个价值对象?
订单报价上下文也将允许从管理页面添加/编辑/删除客户。造成这种混乱的原因吗?管理页面是否应该属于Customer
是实体的另一个上下文的一部分,并且订单引用上下文将使用Customer
作为值对象?
答案 0 :(得分:0)
这是一个很好的问题,您已经部分回答了,您的客户是您管理范围内的实体。
确定对象是否为实体的良好经验法则是用身份的概念来思考。如果您的对象要求的身份与时光相同,即使此人的姓名或联系方式可以更改,那么它很可能是实体。
但是,在定义了该概念的情况下,您可以拥有一个CustomerId,该ID由业务角度(由您自己决定的代码和名称)组成。
此客户ID不是技术ID,而是业务ID,您实体的身份就是该ID。然后,在“订单报价”有限的上下文中,您可以使用同一对象(可能是在共享上下文中的某个位置定义,或者通过复制代码来引用您的客户:在DDD中可以复制某些代码以促进松散耦合)。