3. 流程编排的核心概念与建模语言

流程编排不是把若干接口按顺序调用一遍,而是用一套可被机器解释的模型,把“谁在什么条件下做什么、产出什么、何时结束”固定下来。要读懂并写出这样的模型,先要建立一组最小概念:流程、任务、事件、网关,再理解编排(Orchestration)与编制(Choreography)的区别,最后掌握 BPMN、CMMN、DMN 与状态机这几种建模语言各自回答什么问题。

一、四个最小概念

流程(Process)是一个有明确起点和终点的业务过程容器,它定义了目标、参与方、数据对象和结束条件。例如“数字线程中变更请求的评审与发布”就是一个流程,目标是让变更从提出走到生效,终点是“已发布”或“已驳回”。

任务(Task)是流程中不可再分的工作单元,分为人工任务、服务任务、脚本任务、用户任务等。任务的关键属性是输入、输出、执行者和完成条件。例如“调用 PLM 接口校验物料版本”是一个服务任务,输入是物料号与版本号,输出是校验结果布尔值。

事件(Event)是流程运行中发生的、可被感知的状态变化,分开始事件、中间事件、结束事件,又分捕获型与抛出型。事件是流程与外部世界同步的锚点,例如“收到变更单”“定时器超时”“消息到达”。

网关(Gateway)是控制流的分支与汇聚点,常见有排他网关(XOR,只走一条)、并行网关(AND,全部走)、包容网关(OR,走一条或多条)。网关决定流程的走向,是业务规则在流程层的体现。

二、编排与编制:控制权在哪里

这是最容易混淆的一对概念。在编排中,存在一个中心协调者(编排引擎),它知道整个流程的全貌,主动调用各个服务并等待返回,控制权集中在协调者手里。在编制中,没有中心协调者,每个参与方只知道自己该做什么、该发什么消息、该等什么消息,整体流程是各方协作“涌现”出来的,控制权分散在参与者之间。

一个直观的判据是:如果去掉某个组件,流程是否还能被完整描述?编排去掉引擎就没人知道下一步;编制去掉任何一方,其余方仍按自己的契约运行。工程上,编排适合需要集中监控、补偿、重试的场景;编制适合跨组织、松耦合、各方自治的场景。二者常混合使用:组织内用编排,跨组织边界用编制。

编排 Orchestration(中心协调) 编制 Choreography(对等协作) 编排引擎 持有全流程状态与规则 服务 A 服务 B 服务 C 汇聚结果 / 补偿 / 重试 控制权集中在引擎 参与方 1 只知自身契约 参与方 2 只知自身契约 参与方 3 只知自身契约 消息即契约,无中心协调者 整体流程由各方协作涌现 判据:去掉某组件,流程是否仍可被完整描述? 编排→否(引擎持有全貌);编制→是(各方自治)

三、BPMN、CMMN、DMN:三种语言,三种问题

BPMN(业务流程建模标注)回答“流程怎么走”。它用泳道区分参与方,用任务、事件、网关描述控制流,用消息流描述跨泳道通信。BPMN 适合结构化、可预先确定路径的流程,例如订单审批、变更发布。它的强项是精确表达分支、并行、异常与补偿。

CMMN(案例管理建模标注)回答“知识型工作怎么推进”。它不预设固定路径,而是用“案例文件 + 任务 + 里程碑 + 哨兵条件”描述:哪些任务在什么条件下变得可用,达到什么条件算完成一个阶段。CMMN 适合路径依赖判断、无法事先穷举的场景,例如事故调查、复杂设计评审。

DMN(决策模型标注)回答“这个判断依据什么规则”。它把决策从流程中抽出来,用决策需求图(DRD)表达决策之间的依赖,用决策表表达输入条件与输出结论的映射。DMN 的价值在于让业务规则可独立维护、可测试、可复用,流程只负责调用决策。

三者的协作关系是:BPMN 编排流程,在需要判断的节点调用 DMN 决策,在路径不确定的环节交给 CMMN 案例处理。这种组合在数字线程中很常见——变更流程是 BPMN,变更影响评估规则是 DMN,而影响范围调查可能是 CMMN。

四、状态机建模方法

状态机是另一种建模视角:它不描述“步骤顺序”,而描述“对象在什么状态下、收到什么事件后迁移到什么状态”。一个状态机由状态集合、事件集合、迁移函数、初始状态和终止状态构成。相比 BPMN,状态机更适合表达单个业务对象的生命周期,例如一个变更单的状态:草稿 → 评审中 → 已批准 → 已发布 → 已归档,以及“评审中收到驳回事件 → 回到草稿”这样的迁移。

状态机的工程价值在于:状态是有限的、迁移是显式的,因此可以穷举测试、可以做非法迁移拦截。在实现上,通常用一张迁移表驱动,例如:

当前状态   事件        目标状态   动作
草稿       提交        评审中     锁定字段、通知评审人
评审中     批准        已批准     记录审批人、时间戳
评审中     驳回        草稿       解锁字段、附驳回意见
已批准     发布        已发布     写入 PLM、触发下游
已发布     归档        已归档     只读、移出活跃列表

这张表就是状态机的可执行规格。任何不在表中的“状态 + 事件”组合都应被拒绝,并返回明确错误,而不是静默忽略。这正是状态机比自由流程更难出错的地方。

五、如何选择建模语言

选择依据不是偏好,而是问题的性质。路径可预先确定、需要跨角色协调、需要监控与补偿,选 BPMN;路径依赖判断、任务可用性动态变化、以案例为中心,选 CMMN;判断规则复杂、需要独立维护和测试,选 DMN;关注单个对象生命周期、需要严格状态约束,选状态机。实际项目中,这四者往往同时存在,各自负责最擅长的那一层。

建模时先问三个问题:这个流程的路径能否事先画完?判断规则是否复杂到需要单独管理?是否存在一个需要严格状态约束的核心对象?答案会直接指向 BPMN、DMN 或状态机。

理解这些概念之后,再看任何编排工具,都能把它拆解为:它用什么表达流程、用什么表达任务与事件、用什么表达分支、是否支持决策与案例、状态如何约束。这套拆解能力,比记住某个工具的按钮位置更有长期价值。