Domain driven design 连接对象是实体对象还是值对象?

Domain driven design 连接对象是实体对象还是值对象?,domain-driven-design,Domain Driven Design,我正在开发一个应用程序,在这个应用程序中,用户可以以类似于Twitter的方式相互关注 在阅读了DDD之后,我了解到我的用户是实体对象——我使用他们唯一的ID来引用他们 当一个用户“跟随”另一个用户(即形成连接)时,关系存储在多对多表中。其字段包括FollowerID,TargetID,以及状态。每个跟随者/目标组合只能有两条记录(一条处于活动状态,另一条处于非活动状态),因此我可以根据它们的属性安全地识别对象 所以,我认为我的连接对象是值对象,不是实体对象,但我不确定。你能帮我做这个决定吗?你

我正在开发一个应用程序,在这个应用程序中,用户可以以类似于Twitter的方式相互关注

在阅读了DDD之后,我了解到我的用户是实体对象——我使用他们唯一的ID来引用他们

当一个用户“跟随”另一个用户(即形成连接)时,关系存储在多对多表中。其字段包括
FollowerID
TargetID
,以及
状态
。每个跟随者/目标组合只能有两条记录(一条处于活动状态,另一条处于非活动状态),因此我可以根据它们的属性安全地识别对象


所以,我认为我的连接对象是值对象,不是实体对象,但我不确定。你能帮我做这个决定吗?

你是正确的,实体是唯一的,并且具有身份的概念(即,只有一个唯一的用户可以存在)。
连接
依赖于其他
用户
实体。它代表了两个用户之间的某些方面。这一方面是指是否存在活动或非活动连接。如果不包含用户正在连接的数据,则连接没有标识。它甚至可能在数据库中有自己的主键,但从域的角度来看,它没有自己的标识

因此,我想说,
连接
是一个对象


为了支持我的结论,第187页说:

值对象类表示域中的实体,该实体主要 包含数据,并对其包含的数据有效。值对象是 由其包含的值的组合完全标识。实体 另一方面,对象有自己的生命和丰富的行为 不管它包含什么数据。实体对象通常是对象 寿命更长。值对象表示对象的一个方面 实体,并且只能与实体相关

第189页:

需要进一步的评论来解释两者之间的区别 实体和值对象。您不需要存储库或数据 值对象的映射器。您只需要实体的存储库。 给定实体的存储库(或映射器)肯定需要 关注依赖于给定实体的所有值对象


不久前,我看到一幅关于发明克隆的科学家的漫画。每次他克隆自己时,他都会破坏以前的版本。然后观看演示的人决定打断并破坏破坏破坏部分,所以有两位科学家。漫画以一些有趣的存在主义问题结束


值与实体并不是关于在一种或另一种形式中是否具有id字段。关键是——我们是如何通过我们的领域视角来看待这些对象的。如果他们是价值对象,那么只有他们的价值才重要——第一、第三和第五十三位科学家是相同的。如果我们关心身份,如果我们认为克隆第三位科学家永远不会像第一位科学家那样,那么我们的对象就是一个实体。

“如果不包含用户正在连接的数据,连接就没有身份”——对于FollowerID和TargetID的组合来说,连接是唯一的。所以如果我们有一个TaregtID和FollowerID,我相信它们是用户ID,我们可以识别一个连接。那么,它怎么不是实体对象呢?@HariSubramaniam,另一种说法是,“没有实体,价值对象就无法独立生存。”当然,确定哪个是哪个并不容易,但经过思考和研究后,我非常倾向于将其作为价值对象。