第4章 系统边界与上下文

绘制系统上下文图,明确系统与外部实体的交互。

系统上下文图(System Context Diagram)是技术方案设计的起点。它用最简洁的方式界定“我们要构建什么”以及“它和谁对话”。本章将带你掌握边界划分原则、上下文图绘制方法,并通过实例理解外部实体、输入输出与依赖关系。

订单管理系统 (核心系统) 👤 客户 Web / 移动端 💳 支付网关 Stripe / 支付宝 📦 仓储系统 库存 / 物流 📧 通知服务 邮件 / 短信 下单请求 支付请求 支付结果 发货指令 物流状态 通知触发 同步/请求 异步/事件

▲ 图4-1 订单管理系统上下文图(示例)

4.1 为什么需要系统边界?

系统边界定义了“什么在系统内,什么在系统外”。没有清晰的边界,设计会无限膨胀,需求会模糊不清。边界帮助我们:

  • 聚焦核心职责 —— 只做系统该做的事,把外部能力委托给专业服务。
  • 管理依赖 —— 明确每个外部交互的协议、数据格式和SLA。
  • 控制变更影响 —— 边界内的修改不影响外部,反之亦然。

4.2 上下文图的核心元素

元素说明示例
核心系统你正在设计/构建的软件系统订单管理系统、用户中心
外部实体与系统交互的人、系统、设备客户、支付网关、管理员
交互流数据或控制流的方向与内容下单请求、支付回调、发货指令
边界线视觉上区分系统内外通常用矩形框或虚线区域
系统边界 核心系统 内部模块 外部用户 外部服务

▲ 图4-2 系统边界与外部实体交互示意

4.3 绘制上下文图的步骤

  1. 识别主要外部实体:谁使用系统?系统依赖哪些外部服务?
  2. 定义核心系统:用一个有意义的名称概括系统(如“在线支付平台”)。
  3. 列出关键交互:每个实体与系统之间交换什么数据或指令。
  4. 绘制并验证:使用统一建模语言(UML)或简洁框图,与干系人确认。

4.4 常见错误与最佳实践

错误后果最佳实践
把内部模块画成外部实体边界模糊,职责混乱只画系统外的人、系统、设备
遗漏关键外部依赖设计缺失,后期返工与运维、产品一起脑暴所有交互方
交互流过于细节上下文图变成流程图保持“什么交互”,而非“如何交互”
识别实体 定义系统 列出交互 绘制验证 迭代确认

▲ 图4-3 上下文图绘制流程

4.5 实战:用代码表达上下文

在技术方案文档中,除了图形,也可以用结构化文本描述上下文。例如使用 YAML 或 Markdown 表格:

# system-context.yaml
system: 订单管理系统
external_entities:
  - name: 客户
    interactions:
      - 创建订单 (HTTP POST /orders)
      - 查询订单 (HTTP GET /orders/{id})
  - name: 支付网关
    interactions:
      - 发起支付 (远程API)
      - 接收支付回调 (Webhook)
  - name: 仓储服务
    interactions:
      - 下发发货指令 (gRPC)
      - 订阅库存变更 (消息队列)