跳转到内容
新建笔记

Mermaid 序列图

序列图从上到下表示时间推进,适合解释一次请求、状态变化或跨组件协作。参与者从左到右的顺序应帮助阅读,而不是暗示时间。

sequenceDiagram
actor User as 用户
participant UI as 用户界面
participant Service as 任务服务
participant Repo as 数据仓库
User->>UI: 点击执行
UI->>Service: execute(taskId)
activate Service
Service->>Repo: load(taskId)
Repo-->>Service: task
Service-->>UI: accepted
deactivate Service
UI-->>User: 显示执行中
  • ->>:实线消息,常用于调用或请求。
  • -->>:虚线消息,常用于返回或通知。
  • activate / deactivate:表示参与者正在处理该调用。
  • actor:外部用户或系统角色;participant:系统组件。

箭头样式不能自动定义同步、异步或网络语义。图例和消息名称仍需说清楚协议、返回条件和失败路径。

sequenceDiagram
participant Client
participant Service
participant Store
Client->>Service: save(request)
alt request valid
Service->>Store: persist(data)
Store-->>Service: id
Service-->>Client: 201 Created
else validation failed
Service-->>Client: 400 Bad Request
end

常用控制块:

  • alt / else / end:互斥分支。
  • opt / end:可选步骤。
  • loop / end:重复过程。
  • par / and / end:可并行过程。
  • critical / option / end:临界区及候选路径。
sequenceDiagram
participant UI as 用户界面
participant Executor as 任务执行器
participant State as 状态管理器
participant Hardware as 采集设备
participant Repo as 数据仓库
UI->>Executor: execute(taskId)
Executor->>State: setState(measuring)
State->>Repo: saveState(taskId, measuring)
State-->>UI: statusChanged(measuring)
Executor->>Hardware: acquire()
Hardware-->>Executor: samples
Executor->>Repo: saveResult(taskId, samples)
Executor->>State: setState(measured)

这张图表达职责和顺序,不应混入文件目录、数据库表结构等无关细节。需要解释某个对象内部结构时,另画类图或数据模型。

  1. 是否声明了所有发送或接收消息的参与者?
  2. 消息名称是否表达动作和关键数据,而非含糊的“处理”?
  3. 失败、超时、取消和重试是否会改变设计结论?
  4. 返回消息是否只保留读者需要理解的部分?
  5. 并行关系是真正可并行,还是实现上仍有顺序约束?

来源:CSDN 原文,首次发布于 2025-04-29。