【状态机实现】初识——基于状态机实现的流程编排和Activiti、Camunda、Flowable等工作流的区别
一、状态机 VS 工作流
在工作流引擎中,在完成之前的操作时,就会切换到下一个步骤,而状态机需要一个外部事件,这将导致分支到下一个活动。换句话说,状态机是事件驱动的,而工作流引擎不是。
微观上来讲:
状态机管理状态 ,关心 一个东西(比如一个订单) 的各种身份变化。比如,订单从待支付 -> 已支付-> 已发货。
宏观上来讲:
工作流管流程 ,关心 一系列步骤 (比如很多人参与的审批) 如何一步步走完。比如,员工提交报销 -> 经理审批 -> 财务付款。
从生活上来讲:
状态机像是一个灯的开关,它只关心自己当前是 “开” 还是 “关” 状态。你按一下(事件),状态就变一次。
工作流像是做一道菜的食谱,它规定了你必须先洗菜,再切菜,然后炒菜,最后装盘。这些步骤需要按顺序来,可能还需要不同的人(你负责炒,你朋友负责洗)。
怎么选?
如果你的问题是: “这个东西现在是什么状况?下一步能变成什么?” -> 用 状态机。
如果你的问题是: “这件事接下来应该由谁做什么?” -> 用 工作流。
区别:
状态机 (State Machine) | 工作流 (Workflow) | |
---|---|---|
管什么 | 一个东西的状态变化 | 一系列任务的执行顺序 |
关心点 | 状态 (State) | 步骤 (Step/Task) |
典型例子 | 订单状态、游戏角色状态 | 审批流程、客服工单处理流程 |
关系 | 工作流中的某一步,可能就是由一个状态机来负责的。 |