Kim*_*nce 6 domain-driven-design
我正在开发一个应用程序,用户可以以类似于Twitter的方式互相关注.
在阅读DDD之后,我了解到我的用户是实体对象 - 我使用他们的唯一ID来引用它们.
当一个用户"跟随"另一个用户(即形成连接)时,该关系存储在多对多表中.它的领域包括FollowerID,TargetID,和Status.每个Follower/Target组合只能有两个记录(一个是Active,另一个是Inactive),所以我可以根据它们的属性安全地识别对象.
所以,我认为我的Connection对象是Value Objects,而不是Entity Objects,但我不确定.你能帮我解决这个问题吗?
您是正确的,实体是唯一的,并且带有拥有身份的概念(即,只能存在一个唯一的用户)。A Connection依赖于其他User实体。它代表了两个用户之间的某些方面。这方面是存在活动连接还是不活动连接。在不包含用户正在连接的数据的情况下,连接没有身份。它甚至可能在数据库中拥有自己的主键,但是从域的角度来看,它没有自己的身份。
因此,我想说这Connection是一个价值对象。
为了支持我的结论,Microsoft.Net企业应用程序体系结构,第187页说:
值对象类表示域中的一个实体,该实体主要包含数据,并为其包含的数据保留生命。值对象由其包含的值的组合完全标识。另一方面,不管实体对象包含什么数据,它都有自己的生命和丰富的行为。实体对象通常是寿命更长的对象。值对象代表实体的一个方面,并且只能与实体有关。
也在第189页上:
还需要进一步说明来解释实体和值对象之间的区别。您不需要值对象的存储库或数据映射器。您只需要一个实体的存储库。给定实体的存储库(或映射器)肯定会处理依赖给定实体的所有值对象。