生命周期与状态转换建模

Mermaid 状态图在线编辑器

用 Mermaid stateDiagram-v2 描述一个订单、请求或任务的生命周期。明确稳定状态、事件、条件分支与结束路径,再在上方编辑器中评审转换。

在线创建 Mermaid 状态图

参考下方审批与返修生命周期。转换标签说明事件或条件,不会执行业务规则。

OnUML
Loading diagram preview...

看清一个生命周期允许哪些转换

关心一个对象下一步可以变成什么时,使用状态图;关心流程执行哪些步骤时,使用流程图。

稳定的生命周期状态

使用草稿、已提交、已批准等状态,不把每个操作都画成状态。

转换上的事件

用提交、批准、超时等标签解释状态为什么变化。

分支与结束

用 choice 表示不同结果,用初始和终止标记说明入口与完成。

复合状态

某个阶段拥有内部生命周期时,用复合状态分层表达。

描绘一个对象的生命周期

整张图使用同一个主体,让每条转换的含义保持一致。

  1. 01

    声明 stateDiagram-v2,列出稳定状态,并从 [*] 连到第一个状态。

  2. 02

    为转换添加事件标签,用 choice 表示不同条件结果,在确实结束的位置添加终止标记。

  3. 03

    人工沿正常、拒绝和恢复路径检查预览,确认状态能否到达,再导出。

入口、分支与嵌套生命周期的状态图语法

Mermaid 绘制源码中的转换和标签,不执行守卫条件,也不判断业务规则是否有效。

Mermaid 状态图语法参考 →

初始与终止标记

[*] 位于转换起点时表示入口,位于目标时表示完成。请确认终止结果确实结束了生命周期。

stateDiagram-v2
    state "草稿" as Draft
    state "已提交" as Submitted
    state "已批准" as Approved
    [*] --> Draft
    Draft --> Submitted : 提交
    Submitted --> Approved : 批准
    Approved --> [*]

状态名称与事件标签

展示名称需要空格时,可为短 ID 添加名称。转换中的冒号引入展示文字。

stateDiagram-v2
    state "等待付款" as Awaiting
    state "已支付" as Paid
    state "已取消" as Cancelled
    Awaiting --> Paid : 收到付款
    Awaiting --> Cancelled : 超时

条件结果的 choice

声明 <<choice>> 并标注出口,条件用于解释,不会被编辑器当作表达式验证。

stateDiagram-v2
    state "已提交" as Submitted
    state "已批准" as Approved
    state "已拒绝" as Rejected
    state Review <<choice>>
    Submitted --> Review
    Review --> Approved : 有效
    Review --> Rejected : 无效

复合状态

state 块可以包含内部生命周期。Mermaid 不支持连接不同复合状态各自内部状态的转换。

stateDiagram-v2
    state "处理阶段" as Processing
    state "已完成" as Complete
    [*] --> Processing
    state Processing {
        state "校验中" as Validating
        state "已就绪" as Ready
        [*] --> Validating
        Validating --> Ready : 有效
        Ready --> [*]
    }
    Processing --> Complete
    Complete --> [*]

Mermaid 状态图示例

草稿提交后进入审核,有效请求到达批准并结束;被拒绝的请求回到草稿状态,等待修改。

stateDiagram-v2
    [*] --> Draft
    Draft --> Submitted : 提交
    Submitted --> Review
    state Review <<choice>>
    Review --> Approved : 校验通过
    Review --> Rejected : 校验失败
    Approved --> [*]
    Rejected --> Draft : 修改
  • 提交和修改是转换上的事件,草稿和已提交是稳定状态。
  • Review 是 choice 节点,有效和无效的标签需要与应用规则一致。
  • 尝试给草稿和已提交增加取消事件,再判断已取消是否应该终止生命周期。

常见问题

[*] 表示开始还是结束?

取决于位置:[*] --> Draft 表示初始入口,Approved --> [*] 表示终止结果。

如何为转换添加条件?

在冒号后写可读条件,例如 Review --> Approved : 有效。这只是标签,Mermaid 不执行或验证条件。

如何表示判断节点?

声明带 <<choice>> 的状态,并将它连接到各个可能结果,分别写清条件。

如何表示取消或重试路径?

添加带事件标签的转换,例如 Draft --> Cancelled : 取消 和 Rejected --> Draft : 修改。只有取消会结束生命周期时才把 Cancelled 连到 [*],并手动沿两条路径检查。

可以连接不同复合状态的内部状态吗?

Mermaid 不支持这种跨复合状态的内部转换。可在复合状态边界表达交互,或重新组织模型。

什么时候应该改用流程图?

流程图说明过程中的动作和决策;状态图说明一个主体允许的生命周期转换,例如订单或后台任务。

比较状态建模

Mermaid 与 PlantUML 状态图对比

比较语法、嵌套状态、生命周期表示和两种文本图表工具的建模深度。

阅读状态图对比 →