domain-driven-design - DDD 中限界上下文之间的转换器(以及其他一些问题)

标签 domain-driven-design bounded-contexts

我一直在阅读 Eric Evans 的 DDD:解决软件核心的复杂性问题,在上下文映射部分中,Evans 引用了一个使用翻译器集成 2 个限界上下文(预订上下文和网络遍历服务)的示例他们。

如果我理解正确的话,当我们创建模型时,我们将所有内容都放入有界上下文中,从而为领域创建概念边界。我的问题是:

  1. 如果一切都应该在有界上下文中,那么翻译器应该位于何处?在 Evans 的示例图中,翻译器位于两个限界上下文之外(介于两者之间)。

  2. 假设我们有一个团队致力于 ERP。 ERP 应该放在多个限界上下文中还是只放在一个限界上下文中。基于 Evans 的示例,设计了限界上下文,以便多个团队可以在他们自己的模型上工作。但由于这是一个单一的团队,他们难道不会受益于单一模型,因此整合不会成为问题吗?还是我理解错了?

  3. 在问题 2 的情况下,如果有多个限界上下文,如果在实现中我们需要一个来自 Accounting 的类用于 Payroll 怎么办?我认为我们这里不需要翻译,但我不确定如何分享所需的类(class)。仅从另一个限界上下文中引用所需的类就可以了吗?

  4. 最后,DDD 中的模块如何与限界上下文相关?

最佳答案

  1. 在基础设施层(域外),它是技术细节。

  2. 限界上下文 (BC) 从域中出现,这就是我们识别它们而不是定义它们的原因。一旦确定,如果有很多 BC 并且有可用的开发人员,则可以拆分工作负载,以便可以更快地开发应用程序。单一模型是不可取的,您需要每个 BC 一个单一域模型以及一个用于查询的简化读取模型 (CQRS)。

  3. 我不知道,但对我来说,薪资是会计的一部分,实际上并没有 2 BC。 Account 是一个 BC,但是其他 BC 可能需要一个 Payroll 但该定义是特定于 BC 的。并且可能定义只是一些数据(读取模型)。薪资行为应保留在会计中。因此,您需要明确定义每个 BC 对“工资单”的理解。通常,您会有一个域服务,它会使用 BC 的概念,并且会使用“翻译器”。

  4. 不是。模块只是从技术角度将事物组合在一起。 BC 非常虚拟,您可能会选择一个项目或一个模块与一个 BC 相对应,但这取决于您如何组织事物。

关于domain-driven-design - DDD 中限界上下文之间的转换器(以及其他一些问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23543622/

相关文章:

events - 使用 CQRS 和 EventStore 时如何更新/迁移数据?

c# - 如何向域实体注入(inject)服务以及如何持久化实体

asp.net - 领域驱动设计中的验证级别

domain-driven-design - 上下文映射 - 关系

c# - 学习和实践领域驱动设计,寻找一些指导

design-patterns - 在域驱动设计中使用摘要对象

domain-driven-design - 有界上下文是一个完整的应用程序?

architecture - DDD 中主数据和引用数据的有界上下文

domain-driven-design - DDD : bounded contexts - domain entities that reference concerns in another bounded context

architecture - DDD - 来自其他有界上下文的验证引用 ID