Domain driven design DDD中有界上下文之间的翻译(以及其他一些问题)

Domain driven design DDD中有界上下文之间的翻译(以及其他一些问题),domain-driven-design,bounded-contexts,Domain Driven Design,Bounded Contexts,我一直在阅读Eric Evans的《DDD:解决软件核心的复杂性》一书,在“上下文映射”一节中,Evans引用了一个使用翻译器集成两个有界上下文(预订上下文和网络遍历服务)的示例 如果我理解正确的话,当我们创建一个模型时,我们将所有东西都放在有界的上下文中,为领域创建概念边界。我的问题是: 如果一切都应该在一个有限的上下文中,那么译者应该在哪里?在Evans的示例图中,翻译器位于两个有界上下文的外部(中间) 假设我们有一个团队在进行ERP。ERP应该放在几个有限的上下文中,还是只放在一个上下文中

我一直在阅读Eric Evans的《DDD:解决软件核心的复杂性》一书,在“上下文映射”一节中,Evans引用了一个使用翻译器集成两个有界上下文(预订上下文和网络遍历服务)的示例

如果我理解正确的话,当我们创建一个模型时,我们将所有东西都放在有界的上下文中,为领域创建概念边界。我的问题是:

  • 如果一切都应该在一个有限的上下文中,那么译者应该在哪里?在Evans的示例图中,翻译器位于两个有界上下文的外部(中间)

  • 假设我们有一个团队在进行ERP。ERP应该放在几个有限的上下文中,还是只放在一个上下文中。基于Evans的样本,设计了有界上下文,以便多个团队可以处理他们自己的模型。但是,既然这是一个单一的团队,那么他们就不会受益于单一的模型,这样集成就不会成为一个问题了吗?还是我理解错了

  • 在问题2的例子中,如果有多个有界上下文,那么在实现中,我们需要Accounting中的一个类用于Payroll?我认为我们这里不需要翻译,但我不确定如何共享所需的类。仅仅从另一个有界上下文引用所需的类就可以了吗

  • 最后,DDD中的模块如何与有界上下文相关

  • 在基础架构层(域外),这是一个技术细节

  • 有界上下文(BC)从域中出现,这就是为什么我们识别它们而不定义它们。一旦确定,如果有许多BC,并且有可用的开发人员,那么可以拆分工作负载,以便更快地开发应用程序。不建议使用单一模型,您需要每个BC使用一个域模型,还需要一个用于查询的简化读取模型(CQR)

  • 我不知道,但对我来说,工资是会计的一部分,实际上不存在公元前2年。帐户是BC,但其他BC可能需要工资单,但该定义特定于BC。可能定义只是一些数据(一个读取模型)。工资行为应留在会计中。因此,您需要清楚地定义每个BC对“工资单”的理解。通常,您将拥有一个域服务,该服务将使用来自BC和“translator”的概念

  • 事实并非如此。一个模块只是从技术角度将事物组合在一起。一个BC是相当虚拟的,你可以选择一个项目或一个模块对应一个BC,但这是你决定如何组织事情

  • 如果一切都应该在一个有限的上下文中,那么译者应该在哪里?在Evans的示例图中,翻译器是 在两个有界上下文的外部(中间)
  • 我认为这个问题毫无意义。每个BC都是存在域模型的边界,边界由UL确定,每个BC都有自己的UL。如果只创建一个模型,则不需要翻译。你不是把一个大模型分成几个小模型,而是加入它们

  • 假设我们有一个团队在进行ERP。ERP应该放在几个有限的上下文中,还是只放在一个上下文中。基于埃文斯的 例如,设计了有界上下文,以便多个团队可以 在他们自己的模型上工作。但既然这是一个团队,不是吗 他们在单一模型上受益,所以集成不会成为问题?或 我理解错了吗
  • 我想你理解错了。您根据UL将单个模型拆分为多个BC,而不是拆分为可用的团队。然后,如果您没有足够的团队来容纳创建的BC数量,那么一个团队将不得不开发多个BC。顺便说一句,相反的是不可取的,也就是说,BC不应该由多个团队开发

  • 在问题2的例子中,如果有多个有界上下文,那么在实现中,我们需要Accounting中的一个类用于Payroll? 我想我们这里不需要翻译,但我不知道如何分享 必修课。将仅从中引用所需的类 再来一杯好吗
  • 您不应该引用另一个BC的域对象。BC应该保护它的域模型,这是它的应用层。应用层公开DTO、普通对象,但不应将域模型公开给外部世界。您需要的是一个共享内核(由其他BC共享的模型)

  • 最后,DDD中的模块如何与有界上下文相关

  • 模块只是一个java包,用于将相互关联的东西放在一起。因此,您将BC的源代码拆分为模块。按照UL标准进行,而不是技术方面。例如,每个聚合都有一个模块,而不是实体模块,还有一个存储库模块等等。

    好的,谢谢MikeSW。看起来我需要阅读更多关于有界上下文的内容。根据你的回答,我对有界上下文的理解是错误的。