【发布时间】:2016-03-26 15:15:01
【问题描述】:
我的系统使用“联系人”的语言,这是一种“幽灵用户”,我们有一些信息 - 它的验证规则很窄,它的状态主要是联系信息。我们还有一个“用户”的概念,它是经过全面审查和注册的用户。将“用户”视为充实的“联系人”。
我们试图捕捉的生命周期是,一旦有人使用“联系人”的信息注册,“联系人”将被“用户”替换。
我们在系统中有其他聚合根引用指向“Contact”的 UUID 的“ContactId”。当“联系人”注册时,我们想使用“用户”的新概念在域中表示他们,“用户”现在拥有自己的“用户 ID”UUID。
- 我们如何将仍然通过 ContactID 引用“Contact”的关系保留为现在通过 UserID 引用“User”?
- 尝试将我的聚合转换为另一个聚合是否存在根本问题?
- 如果是这样,我应该如何为“联系人”->“注册用户”的这个特定生命周期建模?
- 如果答案是将这两个想法合并到一个聚合根中,我如何才能让我的域对象始终有效,尽管在此“联系人”实际注册之前“用户”无效?
附带说明一下,我们将 CQRS/ES 用于整体架构。
谢谢!
【问题讨论】:
-
我会继续使用联系人,可能会为它找到另一个名称。当用户注册时,它将获得到 Authentication 子域的适当链接。对于其他聚合/BC,如果这是潜在客户或实际用户,可能只是部分有趣,但如果他们想知道,您始终可以将此信息包含在您保留联系人引用的值对象中,以及名称,例如
-
我使用术语Applicant 来表示尚未在我的一个项目中完全注册的用户。您也可以使用销售术语Lead。
-
@ChrisTickner 为什么需要将
Contact关系转换为User关系?为什么推荐实体会关心?你有一个用例的例子吗?
标签: domain-driven-design cqrs domain-events