在DDD(领域驱动设计)中,限界上下文(Bounded Context)是一个显式的边界,内部包含了领域模型及其相关的应用逻辑。一个限界上下文通常对应一个模块,模块间的映射关系可以通过上下文映射图(Context Mapping)来表达。
上下文映射图是一种工具,用于可视化不同限界上下文之间的关系,以及它们如何相互集成。以下是几种常见的上下文映射关系及其示例:
- 合作关系(Partnership)
- 当两个限界上下文的团队要么一起成功,要么一起失败时,他们需要建立一种合作关系。
- 示例:订单处理和库存管理是两个不同的限界上下文,但它们紧密合作以确保订单的有效性和库存的准确性。两个团队共同制定接口和验收测试,以确保系统的整体成功。
- 共享内核(Shared Kernel)
- 当两个或多个限界上下文共享一部分模型和代码时,它们之间就形成了共享内核关系。
- 示例:用户身份管理可能在多个限界上下文中被使用,如订单处理、客户服务等。这些限界上下文共享一个用户身份管理的内核,以确保用户数据的一致性。
- 客户方-供应方开发(Customer-Supplier Development)
- 一个限界上下文(供应方)为另一个限界上下文(客户方)提供服务或数据。
- 示例:支付处理系统(供应方)为订单处理系统(客户方)提供支付服务。订单处理系统依赖于支付处理系统来验证和处理支付。
- 遵奉者(Conformist)
- 当一个限界上下文(下游)完全遵循另一个限界上下文(上游)的模型时,就形成了遵奉者关系。
- 示例:一个旧的系统(下游)可能无法或不愿改变其数据模型,而新的系统(上游)已经采用了新的数据模型。在这种情况下,旧系统可能会选择成为新系统的遵奉者,即使用新系统的数据模型,尽管这可能不是最优的。
- 防腐层(Anticorruption Layer)
- 当两个限界上下文之间的集成复杂或不可预测时,可以使用防腐层来简化或翻译交互。
- 示例:一个遗留系统(上游)可能具有复杂的接口和数据模型,而新的系统(下游)需要与之集成。在这种情况下,可以在新系统中实现一个防腐层,将遗留系统的复杂性隔离起来,并为新系统提供一个更简单、更一致的接口。
在表达模块间映射关系时,可以使用上下文映射图来可视化这些关系。图通常包含:
- 限界上下文(模块)的边界
- 连接两个限界上下文之间的线段,表示它们之间的映射关系(如合作、共享、客户-供应、遵奉或防腐层)
- 上游(Upstream)和下游(Downstream)的指示,以显示数据或服务的流动方向
- 团队或系统的标识,以指示哪些团队或系统负责哪些限界上下文
通过这种方式,可以清晰地表达DDD中模块(限界上下文)间的映射关系,帮助团队理解系统架构和集成策略。
参考:【DDD】学习笔记-限界上下文与架构-CSDN博客DDD之上下文映射图(Context Mapping)_ddd图-CSDN博客