2

我的系统有“联系人”的语言,这是一种“幽灵用户”,我们有一些信息——它的验证规则很薄,它的状态主要是联系信息。我们还有一个“用户”的概念,它是经过全面审查和注册的用户。将“用户”视为充实的“联系人”。

我们试图捕捉的生命周期是,一旦有人使用“联系人”的信息注册,“联系人”将被“用户”替换。

我们在系统中有其他聚合根,它们引用指向“Contact”的 UUID 的“ContactId”。当“联系人”注册时,我们想使用“用户”的新概念在域中表示他们,“用户”现在拥有自己的“用户 ID”UUID。

  1. 我们如何保持仍然通过 ContactID 引用“Contact”的关系,现在通过 UserID 引用“User”?
  2. 尝试将我的聚合转换为另一个聚合是否存在根本问题?
  3. 如果是这样,我应该如何为“联系人”->“注册用户”的这个特定生命周期建模?
  4. 如果答案是将这两个想法合并到一个聚合根中,我如何才能让我的域对象始终有效,尽管在此“联系人”实际注册之前“用户”无效?

附带说明一下,我们将 CQRS/ES 用于整体架构。

谢谢!

4

1 回答 1

2

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

你可以让 aShoppingCart变成 a 变成QuoteaOrder变成Invoice

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

我建议将它们分开并用它们自己的生命周期来处理它们,因为它们看起来可能非常密切相关,因为它们确实看起来是彼此不同的概念。

您的“幽灵用户”中可能有线索。那可能是您未正确定义的实体/ AR。将有不同的方式来处理这个概念,这取决于它是如何被使用的。它可以像表示两个源实体中的一个值对象一样简单。

于 2016-03-27T07:07:24.267 回答