将引用的聚合根转换为另一个聚合根

时间:2016-03-26 15:15:02

标签: domain-driven-design cqrs domain-events

我的系统的语言为" Contact"这是一种幽灵用户"我们有一些信息 - 它的验证规则很渺茫,而且它的状态主要是联系信息。我们还有一个" User"这是一个经过全面审查和注册的用户。想想"用户"作为一个充实的"联系"。

我们试图捕获的生命周期是"联系人"将被" User"取代一旦有人注册了这个"联系人的信息。

我们在系统中有其他聚合根,它们引用了一个" ContactId"指向"联系人"的UUID。当那个"联系"寄存器,我们想要使用" User"的新概念。在域中表示他们和"用户"现在拥有它自己的用户ID" UUID。

  1. 我们如何保持仍然引用"联系人"通过ContactID,现在引用"用户"通过UserID?
  2. 尝试将我的聚合转换为另一个聚合物是否存在根本问题?
  3. 如果是这样,我应该如何模拟"联系人"的特定生命周期。 - > "注册用户"?
  4. 如果答案是将两个想法合并为一个聚合根,那么我怎样才能保持我的域对象始终有效,尽管用户"用户"在此之前无法生效"联系"实际登记?
  5. 作为旁注,我们使用CQRS / ES作为整体架构。

    谢谢!

1 个答案:

答案 0 :(得分:2)

你所描述的实际上并不那么奇怪,因为它一直在发生。

您可以ShoppingCart成为Quote成为Order的{​​{1}}。

尝试合并概念通常会导致痛苦和痛苦。

我建议将它们分开并用它们自己的生命周期处理它们,因为它们可能似乎非常密切相关,因为它们当然似乎是彼此不同的概念

您的“幽灵用户”可能有线索。这可能是您之后尚未正确定义的实体/ AR。根据使用方式的不同,处理该概念的方法也不同。它可能像表示两个源实体的枯萎的值对象一样简单。