状态机

各个状态与带标签的转换,从开始到结束。

1 个状态机示例

内容审批状态

一份文档从草稿经评审到发布或被拒的生命周期。

每个转换都标注触发它的事件,这正是状态机的用途。拒绝路径用强调色绘制,读者能看到工作在哪里被打回。

在编辑器中打开

什么是状态机图?

状态机图(状态图)描述一个对象在生命周期中可能处于的状态,以及触发状态转换的事件。它基于有限状态机理论,Harel 在 1987 年提出的状态图被 UML 吸收为状态机图:实心圆是初始状态,圆角矩形是状态,带标签的箭头是转换。

读图时从实心圆出发,沿箭头上的「事件 [条件]」走到下一个状态,带圈的实心圆是终止状态。

什么时候用状态机图

  • 设计订单、工单或审批单的状态流转,例如待支付、已支付、已发货、已退款。
  • 写代码前和测试一起确认哪些转换是非法的,避免出现「已退款又发货」。
  • 如果关心的是多个系统之间的消息先后,而不是单个对象的状态,应该用时序图。

怎样画好一张状态机图

  1. 状态用形容词或过去分词命名,如「已审核」;转换用事件命名,如「审核通过」。
  2. 检查每个状态是否都有出口,除终止状态外不要留下死胡同。
  3. 转换有前置条件时用方括号写在事件后,例如「支付 [金额正确]」。