连接与数据:SequenceFlow、MessageFlow与数据对象
在BPMN中,流程对象(事件、任务、网关)需要通过连接对象来组织成一个完整的流程。本文讲解顺序流、消息流、数据对象及其语义,这些是建模的”血管“。
连接对象的三大类型
1. 顺序流(Sequence Flow)
含义:表示流程执行的先后顺序,仅在同一池内使用。
特点:
- 箭头形式,从一个对象指向另一个
- 控制流的运行方向与执行序列
- 可附加条件表达式(如金额 > 1000)
- 从网关出发的顺序流通常带条件
符号:
顺序流(同池内)
标注说明:
- 无标注:无条件执行
- 标注条件:
[condition]如[金额 > 1000] - 标注”默认”:当其他条件都不满足时,流向此边
伪代码示意:
1 | // 顺序流的逻辑 |
2. 消息流(Message Flow)
含义:表示跨池的异步通信,流程对象之间的消息传递。
特点:
- 仅连接不同池的对象
- 代表异步消息,非流程执行顺序
- 通常与事件配合(消息启动事件、消息中间事件等)
- 不能直接”触发”后续活动,需要接收方通过事件来响应
符号:
消息流(跨池异步)
标注说明:
- 消息名称:如
订单确认信息、支付成功通知
消息流 vs 顺序流的核心区别:
1 | 顺序流(同池内): |
3. 数据关联(Association)
含义:连接数据对象与活动,表示数据的输入/输出。
特点:
- 仅用于关联数据对象,不控制流程执行
- 可标注”输入”或”输出”方向
- 帮助理解数据流动
符号:
数据关联(点线箭头)
数据对象(Data Objects)
概念
数据对象代表流程中被创建、修改或使用的信息。
分类:
- 数据对象(Data Object):过程中产生的数据(如订单、发票)
- 数据存储(Data Store):持久化数据源(如数据库、文件)
- 数据输入/输出:流程与外部的数据交换
符号:
数据对象(纸张折角) 数据存储(数据库桶)
小案例:数据流动
1 | [创建订单] |
伪代码示意:
1 | // 创建订单(产生数据) |
条件表达式与默认流
条件表达式
网关分支时,顺序流可带条件:
1 | ◇ [排他网关:订单金额] |
条件写法(伪代码):
1 | // 简单比较 |
默认流
在网关处,当其他条件都不满足时,流向默认分支。
标注方式:顺序流上标注 Default 或菱形符号指向默认出边。
小案例:订单处理的完整流程
1 | [客户](参与者) |
常见设计误区
| 误区 | 问题 | 纠正 |
|---|---|---|
| 用顺序流跨池 | 违反BPMN规范 | 跨池必须用消息流 |
| 消息流控制流程顺序 | 消息是异步的,不保证顺序 | 在接收方用事件响应消息 |
| 忽视数据对象 | 流程逻辑不清晰 | 标明关键数据的输入/输出 |
| 过度细化数据 | 模型复杂 | 仅标明关键数据对象 |
小结
掌握连接与数据:
- ✓ 顺序流控制同池执行顺序
- ✓ 消息流表示跨池通信(异步)
- ✓ 数据对象明确信息流动
- ✓ 条件表达式驱动网关决策
能够设计出信息流清晰、数据关系明确的流程。