流程建模基础:流程图的符号与规范(BPMN 2.0)
各位同学,今天我们来聊聊流程建模。说白了,就是把业务逻辑画成图,让机器和人能看懂。我做了这么多年自动化,发现一个规律:流程图画不好,后面写代码全是坑。所以这一章,咱们把BPMN 2.0的底子打扎实。
核心观点:BPMN 2.0不是画着玩的,它是可执行的标准。你画的每一个符号,将来都可能变成代码里的一个节点。
一、BPMN 2.0 到底是什么?
BPMN 2.0,全称是Business Process Model and Notation 2.0。嗯,名字挺长,你记住它是流程建模的国际标准就行。我2015年第一次接触它时,觉得这玩意儿跟Visio画的流程图没啥区别。后来踩了坑才发现——BPMN的符号是有严格语义的,不是随便画个框框就能跑。
举个例子:你画一个矩形,在普通流程图里它就是个“步骤”。但在BPMN里,矩形代表活动(Activity),它必须有一个明确的输入和输出。我曾经在项目里把“人工审批”画成了“服务任务”,结果引擎直接报错——因为服务任务要求自动执行,不能等人点按钮。
我的习惯:每次画图前,先问自己三个问题——这个节点谁来执行?需要什么数据?产出什么结果?想清楚再动笔。
二、三大核心元素:活动、网关、事件
BPMN 2.0的符号很多,但核心就三类:活动、网关、事件。你把这仨搞明白,80%的流程都能画。
1. 活动(Activity)
活动就是流程里“干活”的节点。它分两种:
- 任务(Task):原子操作,不可拆分。比如“发送邮件”、“调用API”。
- 子流程(Sub-Process):可以展开的复合操作。比如“订单处理”里面可能包含“审核”、“发货”、“开票”三个步骤。
我记得有一次做供应链项目,客户把“质检”画成了一个任务。结果一跑流程,发现质检要分“外观检查”和“性能测试”两步。没办法,只能改成子流程。所以我的建议是:如果某个活动需要多人协作或分步骤,果断用子流程。
| 活动类型 | 符号 | 说明 | 常见场景 |
|---|---|---|---|
| 用户任务 | 圆角矩形 + 人形图标 | 需要人工操作 | 审批、填写表单 |
| 服务任务 | 圆角矩形 + 齿轮图标 | 系统自动执行 | 调用API、计算 |
| 脚本任务 | 圆角矩形 + 脚本图标 | 执行一段代码 | 数据转换、规则判断 |
| 子流程 | 圆角矩形 + 加号 | 可展开的复合活动 | 订单处理、审核流程 |
避坑指南:我曾经把“用户任务”和“服务任务”搞混,结果流程引擎一直等着用户操作,而实际上应该自动调用接口。记住:有人参与的用用户任务,机器干的用服务任务。
2. 网关(Gateway)
网关就是流程里的“岔路口”。它决定流程往哪走。BPMN里最常用的网关有三种:
- 排他网关(XOR):二选一,只能走一条路。比如“金额大于1000走经理审批,否则走自动通过”。
- 并行网关(AND):所有分支同时执行。比如“下单后同时通知仓库和财务”。
- 包容网关(OR):满足条件的分支都执行。比如“如果客户是VIP且订单金额大,两个特殊处理都触发”。
你想想看,排他网关就像你早上出门——要么坐地铁,要么打车,只能选一个。并行网关就像你同时烧水和煮面,两件事互不干扰。包容网关嘛,有点像“如果下雨就带伞,如果天冷就加衣”——条件可以叠加。
个人经验:新手最容易犯的错误是网关条件写重叠。比如排他网关的两个分支条件分别是“金额>1000”和“金额<=1000”,这没问题。但如果你写成“金额>1000”和“金额>500”,那金额1500的订单就会同时满足两个条件,排他网关会报错。所以,写条件时一定要检查互斥性。
3. 事件(Event)
事件是流程里“发生的事”。它分三种:开始事件、中间事件、结束事件。
- 开始事件:流程的起点。比如“收到订单”、“定时触发”。
- 中间事件:流程执行过程中发生的事。比如“等待审批结果”、“接收消息”。
- 结束事件:流程的终点。比如“订单完成”、“流程终止”。
嗯,这里要注意:事件是有类型的。比如“定时事件”和“消息事件”的图标不一样。我见过有人把“定时开始”画成了“消息开始”,结果流程永远不启动——因为引擎在等消息,而实际上应该等时间到。
| 事件类型 | 图标特征 | 说明 | 示例 |
|---|---|---|---|
| 开始事件 | 细圆圈 | 流程启动 | 收到HTTP请求 |
| 中间事件 | 双圆圈 | 流程中发生 | 等待30分钟 |
| 结束事件 | 粗圆圈 | 流程终止 | 订单完成 |
| 定时事件 | 圆圈+时钟 | 时间触发 | 每天8点执行 |
| 消息事件 | 圆圈+信封 | 消息触发 | 收到邮件 |
三、知识体系总览
下面这张图,是我自己整理的BPMN 2.0核心知识结构。你把它存下来,画图时对照着看,基本不会出错。
四、实战中的避坑指南
理论说完了,咱们聊聊实战。我这些年做流程建模,踩过不少坑,挑几个典型的说说:
- 符号滥用:有人把所有节点都画成“任务”,不管它是人工还是自动。结果引擎跑起来,该自动的等着人点,该人工的自动执行了。记住:符号决定行为。
- 网关条件不完整:排他网关必须覆盖所有可能性。比如“金额>1000走A,金额<=1000走B”,这没问题。但如果你只写了“金额>1000走A”,那金额<=1000的订单就卡住了。我建议:每个排他网关都加一个默认分支。
- 事件类型搞混:开始事件和中间事件的图标很像,但语义完全不同。开始事件是流程的“启动开关”,中间事件是流程中的“等待点”。我曾经把“等待审批”画成了开始事件,结果流程一启动就卡在等待上——因为审批还没发生呢。
我的小技巧:画完图后,用“走流程”的方式模拟一遍。从开始事件出发,沿着每个分支走到底,看看有没有死胡同或逻辑漏洞。这个方法帮我发现了至少30%的隐藏问题。
五、总结
好了,这一章的内容就这些。BPMN 2.0的符号规范,说白了就是三个词:活动、网关、事件。活动是干活,网关是选路,事件是触发。你把这三点刻在脑子里,画出来的流程图至少是合格的。
最后送大家一句话:流程建模不是画画,是编程的另一种形式。你画的每一个符号,将来都会变成代码里的逻辑。所以,认真对待每一个框框和箭头。