Domain driven design DDD:除了电子商务示例外,如何将应用程序划分为有界上下文?

Domain driven design DDD:除了电子商务示例外,如何将应用程序划分为有界上下文?,domain-driven-design,Domain Driven Design,我们这里有一个相当大的应用程序,我正在考虑对它进行一些重构,以遵循DDD的指导 目前,它的首要问题是有界上下文和上下文映射。也许我只是不喜欢,但在我看来,除法是不可能的。例如,我们到处都有用户对象,它是完全相同的用户对象:显示名称、id和角色。还有一个例子:我们有CatalogItem对象来帮助我们对各地的其他实体进行分类。我们必须引入有界上下文依赖吗?除了那个烦人的电子商务示例之外,还有什么关于这个问题的指导吗?我发现,起初,有界上下文和聚合根似乎是DDD中最简单的概念。直到您真正实现了一个有

我们这里有一个相当大的应用程序,我正在考虑对它进行一些重构,以遵循DDD的指导


目前,它的首要问题是有界上下文和上下文映射。也许我只是不喜欢,但在我看来,除法是不可能的。例如,我们到处都有用户对象,它是完全相同的用户对象:显示名称、id和角色。还有一个例子:我们有CatalogItem对象来帮助我们对各地的其他实体进行分类。我们必须引入有界上下文依赖吗?除了那个烦人的电子商务示例之外,还有什么关于这个问题的指导吗?

我发现,起初,有界上下文和聚合根似乎是DDD中最简单的概念。直到您真正实现了一个有实际问题的DDD应用程序。这里没有简单的答案。它完全取决于您的业务需求(可伸缩性、可用性、延迟、一致性等)。“正确”的解决方案是平衡这些问题以最适合您的需要的解决方案

根据您给出的示例,有几种选择:

  • 一个大的有界上下文
  • 具有重复数据的独立有界上下文(可能使用发布/订阅消息传递系统实现)
  • 将用户和CatalogItems拉入自己的绑定上下文,并让其他绑定上下文通过服务访问它们

需要记住的一点是,查询需求通常与“编写”需求非常不同。它通常可以简化应用程序设计,使单独的有界上下文纯粹用于查询。如果这听起来可能适用,请查看CQR。

如果您发现了这一点,请告诉我^^我不确定你是否应该称之为分离的有界上下文。。。您可以使用BC实现来隔离查询和命令。但您将使用相同的通用语言和东西,这只是一个实现细节。(我刚刚看到它是从2010年开始的,我将把它留在这里记录在案)