首页 > 解决方案 > 引用另一个有界上下文的实体时应该使用实体或值对象吗?

问题描述

在我的领域中,我有两个有界上下文,identity并且management.

identity有界上下文中,我有user实体。和管理我有visitormanager。两者visitormanager都有一些不同的属性,并且都引用user.

如果visitor并且manager是实体,我可以使用用户 ID 作为他们的 ID 吗?我的意图是有 api 之类的visitors/:userID

如果它们是值对象,那么我如何为每种类型的对象保留属性?

标签: domain-driven-design

解决方案


当有不同的有界上下文时,保持它们隔离很重要,因为它们共享相同的无处不在的语言,但含义因上下文而异。

完全可以有这样的设计。例如,在您的有界上下文中identity,您有一个值对象UserId(很可能)。这可以由不同的属性组成,但为了简单起见,假设它只是封装了一个String.

然后,在您的management有界上下文中,您可以在新类中使用 Value Object UserId,但特定于您的有界上下文。

然后,关于你的entities visitormanager:两者都是聚合根,所以它们是entities。它们只是您的聚合的入口点。它们是实体,但它们的 ID 是值对象UserId

您最终会得到以下可能的代码:

public class Visitor {
    private UserId id;
    // some other attributes and domain method    
}

public class Manager {
    private UserId id;
    // some other attributes and domain method    
}

这是一个非常有限的示例,但总而言之,您有:

  • Identity有界上下文:1 个实体User和 1 个 VOUserId
  • Management有界上下文:2 个实体Visitor Manager和 1 个 VOUserId

为了进一步阅读,我推荐这个博客来深入研究正确设计一个聚合:


推荐阅读