让我们假设:
- 作为聚合根的
User
实体。(包含登录名、密码) - 一个
UserProfile
实体作为 的内部部分User
。(包含lastName,firstName等..)
这种分离的一个原因是保持 SRP(关注点分离):
User
=> 处理身份验证数据,UserProfile
=> 处理用户的联系信息等。
我没有选择创建UserProfile
一个链接且不同的聚合根,因为从逻辑上讲,UserProfile
没有链接的 aUser
严格来说是没有意义的。因此,我们谈论的composition
是 UML 意义上的 a。
规则说任何客户端都不应该直接访问聚合根的内部实体。因此,任何客户都不需要知道UserProfile
身份来完成他们的任务。重要的是那个User
。如果有人想更新关联的 ,则应该为此目的存在UserProfile
一个方法。User
当然,我的用户实体需要一个 UUID(根据 Vaughn Vernon 的IDDD书的建议生成一个)。所以我使用专用库(Apache,因为我使用 JVM)生成了一个。
我的问题集中在相关的UserProfile
身份上。因为期望它在外面可以到达是没有意义的;正如埃文斯建议的那样,我们应该设置一个“简单”的本地标识,仅在相关聚合中唯一。
乍一看,1-N 关系会很有趣:一个User
包含 MULTIPLE UserProfile
。UserProfile
然后,根据用例,这些本地身份将允许检索权限。
但是在1-1 关系的情况下(一个User
只有一个UserProfile
),我什至怀疑“身份”的必要性,无论会有什么。
我应该如何处理这种情况?