Domain driven design DDD-实体是否应该具有相等比较器

Domain driven design DDD-实体是否应该具有相等比较器,domain-driven-design,Domain Driven Design,埃里克·埃文斯(Eric Evans)在视频中说:“我开始相信一个实体甚至不应该有平等比较。” 这是否意味着该实体不需要一个必需的Id字段(因为它的基础设施问题)。在什么情况下需要实体比较?就像他提到的,在大多数情况下,这可能是不必要的 [编辑]当我提到不需要Id时,它是构建实体的w.r.t,即我可以只使用一个新对象(顺序=新顺序)测试我的逻辑,而不传递Guid或Id。理想情况下,会生成一个持久性Id。从理论上讲,实体不应该关心它的Id;当一个实体查询或使用它自己的ID时,我现在没有想到任何用例

埃里克·埃文斯(Eric Evans)在视频中说:“我开始相信一个实体甚至不应该有平等比较。”

这是否意味着该实体不需要一个必需的Id字段(因为它的基础设施问题)。在什么情况下需要实体比较?就像他提到的,在大多数情况下,这可能是不必要的


[编辑]当我提到不需要Id时,它是构建实体的w.r.t,即我可以只使用一个新对象(顺序=新顺序)测试我的逻辑,而不传递Guid或Id。理想情况下,会生成一个持久性Id。

从理论上讲,实体不应该关心它的Id;当一个实体查询或使用它自己的ID时,我现在没有想到任何用例

但是,它的ID被外部世界使用。几乎所有使用实体的客户端代码(表示、应用程序或基础结构)都将使用其ID。如果没有ID,客户端代码将无法在所有实体的集合中找到实体

甚至域层代码也使用该ID。例如,在聚合中,聚合根在定位嵌套实体时使用ID,即使它只是一个简单的整数键

更新:
在现实世界中,你作为一个人类实体,当你独自吃、喝、睡或做任何事情时,你是否需要你的社会安全号码(或任何你拥有的ID)?不,它在某种程度上与人类有机体运作的商业规则无关。其他人类实体需要您的ID来区分您与其他实体。

Eric Evans所指的是等式运算符/方法的含义,以及您首先比较两个实体的原因。如果您坚持尝试在同一事务中不处理多个聚合,那么拥有两个表示同一实体的对象会变得更加奇怪

有一个相等运算符/方法来检查技术/合成密钥,或者甚至是业务密钥,这可能是可以的,但是您什么时候需要它呢

如果创建一个实体的两个“空”(尚未设置关键帧)实例,然后使用相等运算符/方法,则需要应用许多规则来确定它们是否表示同一实体。也许是社会保险/身份证号码?即便如此,这仍然是一件奇怪的事情。这些“业务”键在任何情况下都可能是数据存储中受约束的值/列


我认为没有提到mot具有某种独特的标识,因为这是实体与生命周期的关联。我不会放弃某种类型的
Id
,不。

在将实体添加到hashset的场景中如何?我在这里问了一个问题,你是否愿意回答:+1.编辑后:是的,您可以在不传递ID的情况下实例化新实体。请参阅我的更新答案