开学特惠 会员低至4.4折 限时加赠 10000 AI积分 立即前往 arrow

状态机图怎么画?状态、事件与异常迁移

文章目录
免费使用墨刀
更新时间: 2026年10月13日

状态机图适合描述“同一个业务对象会处于哪些状态,以及什么事件让它迁移”,它比普通流程图更关注状态持续时间、可触发事件和禁止迁移。画法不是把所有页面连起来,而是先列状态,再写事件和条件,最后为每条迁移补结果。下面用“订阅续费”案例演示如何从状态表画到可评审的状态机图。

先列迁移表,再用墨刀流程图表示节点和连线,能更早发现条件重叠、无法退出的状态和遗漏的异常分支。

状态机图的状态、事件、条件与异常迁移
以订阅续费对象为例,把正常扣款、待支付、失败重试和取消迁移放在同一张图中。

先区分对象、状态和事件

本例描述一项续费任务,待续费、扣款中、续费成功、扣款失败和已取消是它的状态;用户点击“立即续费”、系统发起扣款、支付回调成功、重试次数耗尽是事件。页面、按钮和接口都不是状态本身。先把三类词分开,团队才不会把“点击支付”画成一个长期状态,或把“订单详情页”误当成业务节点。

类别订阅续费例子写法提示
对象订阅订单 S-1024一张图只描述一个主要对象
状态待续费、扣款中、续费成功用能持续一段时间的名词描述
事件发起续费、支付成功回调用动作描述触发迁移
条件余额足够、重试次数小于3写在迁移线上,避免藏在备注里

把迁移规则写成表,再画图

先用表格检查互斥和遗漏,再在墨刀流程图中把状态画成节点、事件画成连线标签。以续费任务 S-1024 为例;以下“最多重试 3 次”仅是本例规则,实际需由业务确认:

当前状态事件/条件下一状态用户可见结果
待续费到期前自动扣款扣款中显示处理中,不允许重复发起
扣款中支付回调成功续费成功更新到期日并生成回执
扣款中支付失败且可重试扣款失败说明原因并显示重试入口
扣款失败重试次数小于3且用户确认扣款中保留订单号,避免重复创建
扣款失败重试次数达到3待人工处理提示联系客服,不再自动扣款
待续费用户取消自动续费已取消终止本次续费任务;订阅权益期限另按业务规则处理
墨刀白板中的订阅续费状态机,区分明确扣款失败与超时待确认
明确失败才能进入失败分支;结果未知时先查询确认,避免把超时直接当成失败。

三步画出可评审的状态机图

  1. 圈定生命周期:写出对象从创建到结束会经历的最小状态,暂时不放页面和接口细节。
  2. 补迁移条件:为每条连线写唯一事件,必要时增加权限、时间、金额或重试次数条件。
  3. 走查异常:逐个状态问“事件失败、重复触发、回调延迟、用户退出时怎么办”,把有业务意义的分支画出来。

一张图太大时按对象拆分,例如把支付对象和订阅对象分开,再用订单号或回调事件标出关联。不要把每个视觉弹窗都加成状态,否则图会失去业务判断价值。

状态机图最容易漏的边界

重复事件:用户连续点击续费,系统应回到已有扣款中状态还是创建两笔订单?在迁移规则中写幂等键或禁止条件。

未知结果:支付请求超时不等于失败。可以增加“待确认”状态,允许查询结果后再决定成功或重试。

终止后的动作:已取消或续费成功是否允许撤销?如果不允许,明确拒绝原因;如果允许,写出逆向迁移和权限条件。

交付给产品、设计和研发的材料

最终包应包括状态机图、迁移表、事件命名、状态对应的用户文案,以及仍需确认的规则。评审时先从最危险的迁移开始:扣款中刷新、回调延迟、重复重试和取消后再次续费。页面原型可以引用状态机节点,但不要用页面数量代替状态覆盖;研发实现后还应按迁移表编写接口和测试用例。

给每条迁移补上守卫条件

状态机图最有价值的部分往往不是节点数量,而是连线上的条件。把“扣款失败”拆成“可重试”和“不可重试”两条迁移,条件写清余额、重试次数、支付回调或人工介入。条件重叠时应明确优先级,或回到业务规则重新定义为互斥条件;否则同一事件可能匹配不同迁移,导致不同服务得到不同结果。

迁移守卫条件应禁止的动作
待续费→扣款中订单未过期且没有进行中的扣款禁止重复创建支付单
扣款中→待确认请求超时且未收到明确失败禁止直接展示“扣款失败”
待确认→续费成功查询到唯一成功回执禁止再次扣款

从图得到测试用例

每条迁移至少对应一个正向用例和一个边界用例。比如“扣款失败且可重试”要验证重试后仍使用同一订阅订单;“超时待确认”要验证刷新页面不会把状态退回待续费。测试标题用“当前状态+事件+条件+预期状态”表达,研发可以直接放进测试计划。

当状态机需要和页面原型一起评审时,让产品先讲对象生命周期,再让设计展示对应状态,最后让研发确认事件和接口。若有人只能根据页面颜色判断状态,说明图或文案还不够明确。

状态、页面和接口状态不能直接画等号

一个业务状态可能对应多个页面:扣款中既能出现在付款页,也能出现在订单详情页;一个页面也可能展示多种状态。HTTP 请求成功只说明接口请求完成,不一定表示扣款成功。先确定业务状态的唯一来源,再决定页面如何读取和解释结果。

图中再加一列“由谁确认”:用户点击只发起续费,支付结果由回执或查询确认,超时只进入待确认。刷新页面应读取最新业务状态,不得重新发起扣款。将这些约定写入接口和测试说明,才能让状态机真正约束实现。

下一步在墨刀流程图中先画待续费、扣款中、待确认和成功四个节点,沿着“请求超时—查询结果”走查一次,再补失败与取消分支;先确认迁移规则,再对应到页面状态。

免费在线原型设计工具

内容丰富组件拖拽即用

多人在线编辑实时协作

海量模板素材快速复用

一键分享交付在线评论互动