Architecture DDD Aggregate Root/在这种情况下,我的内部实体是否需要本地标识?

Architecture DDD Aggregate Root/在这种情况下,我的内部实体是否需要本地标识?,architecture,entity,domain-driven-design,aggregate,Architecture,Entity,Domain Driven Design,Aggregate,让我们假设: 一个用户实体作为聚合根。(包含登录名、密码) 一个UserProfile实体,作为User的内部部分。(包含姓、名等) 这种分离的一个原因是保持SRP(关注点分离): User=>处理身份验证数据,UserProfile=>处理用户的联系信息等 我没有选择将UserProfile作为链接的、不同的聚合根,因为从逻辑上讲,没有链接的User的UserProfile完全没有意义。因此,我们讨论UML意义上的组合 规则规定,任何客户端都不应直接访问聚合根的内部实体。 因此,任何客户都

让我们假设:

  • 一个
    用户
    实体作为聚合根。(包含登录名、密码)
  • 一个
    UserProfile
    实体,作为
    User
    的内部部分。(包含姓、名等)
这种分离的一个原因是保持SRP(关注点分离):
User
=>处理身份验证数据,
UserProfile
=>处理用户的联系信息等

我没有选择将
UserProfile
作为链接的、不同的聚合根,因为从逻辑上讲,没有链接的
User
UserProfile
完全没有意义。因此,我们讨论UML意义上的
组合

规则规定,任何客户端都不应直接访问聚合根的内部实体。 因此,任何客户都不需要知道
UserProfile
身份才能完成任务。重要的是
用户。
如果有人想更新相关的
用户配置文件
,则应在
用户
中提供一种方法来实现此目的

当然,我的用户实体需要一个UUID(根据Vaughn Vernon的书中的建议生成)。 因此,我使用一个专用库(Apache,因为我使用JVM)生成了一个

我的问题集中在相关的
UserProfile
identity上。 因为期望它在外面可以到达是没有意义的;正如Evans建议的那样,我们应该设置一个“简单”的本地标识,该标识只在相关集合中唯一

乍一看,1-N关系很有趣: 一个
用户
包含多个
用户配置文件
。根据用例,这些本地标识将允许检索正确的
用户配置文件

但在1-1关系(一个
用户
只有一个
用户档案
)的情况下,我甚至怀疑“身份”的必要性,不管是什么


我应该如何处理这种情况

正如您所说,如果每个
用户只有一个
用户配置文件
,那么它就不需要有明确的本地身份。例如,在每个
用户有多个
UserProfile
值对象的场景中,如果您想更新特定的配置文件,您需要一种方法来引用它们