限界上下文(Bounded Context)
限界上下文(Bounded Context)是领域驱动设计(DDD,Domain-Driven Design)中的一个核心概念,由Eric Evans在其著作《领域驱动设计》中首次提出。限界上下文定义了一个明确边界内的术语、逻辑和模型,有助于管理系统的复杂性,并保证不同团队间的一致性和沟通有效性。
实际案例:电子商务平台
假设我们正在构建一个电子商务平台,该平台包含多个子域:产品目录管理、用户账户管理、订单处理、支付处理、仓储物流等。
1. 产品目录管理(Product Catalog)
-
限界上下文边界内术语:
Product
(产品)Category
(商品分类)
-
功能:
- 添加新产品
- 分类管理
- 修改产品详情
在这个上下文中,Product
可能只包含基本的产品属性,如ID、名称、价格、库存状态、所属类别等;而关于产品评价、购买记录这些则不在这个上下文范围内。
2. 用户账户管理(User Account Management)
-
限界上下文边界内术语:
User
(用户)Account
(账户)
-
功能:
- 注册新用户
- 登录与注销
- 修改密码
在这里,User
和Account
的细节可能非常丰富,包括联系信息、历史登录记录、偏好设置等,但与购物行为(如购物车、订单)没有直接关联。
3. 订单处理(Order Processing)
-
限界上下文边界内术语:
Order
(订单)Payment
(付款)
-
功能:
- 创建订单
- 发送确认邮件
- 追踪订单状态
在这个上下文中,Order
包含了具体的商品列表、总金额、用户信息、配送地址等,而支付细节则需与支付处理限界上下文协调。
4. 支付处理(Payment Processing)
-
限界上下文边界内术语:
PaymentMethod
(支付方式)Transaction
(交易)
-
功能:
- 选择支付方式
- 执行交易
- 管理退款
这里,涉及到银行接口集成、第三方支付网关交互,但不关心订单的具体商品是什么。
协调与整合
各限界上下文之间通过明确的边界和协议进行交互。例如,订单处理
限界上下文可能需要访问产品目录管理
中的Product
来获取商品的当前价格信息;而支付处理
限界上下文则依赖于订单处理
上下文的Order
实体来进行最终结算。
这种设计使得每个团队都可以专注于自己负责的领域,同时确保整个系统的一致性和可靠性,降低了跨团队协作的难度和风险。