序列图从上到下表示时间推进,适合解释一次请求、状态变化或跨组件协作。参与者从左到右的顺序应帮助阅读,而不是暗示时间。
基本消息
跳转到“基本消息”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)这张图表达职责和顺序,不应混入文件目录、数据库表结构等无关细节。需要解释某个对象内部结构时,另画类图或数据模型。
绘图检查
跳转到“绘图检查”- 是否声明了所有发送或接收消息的参与者?
- 消息名称是否表达动作和关键数据,而非含糊的“处理”?
- 失败、超时、取消和重试是否会改变设计结论?
- 返回消息是否只保留读者需要理解的部分?
- 并行关系是真正可并行,还是实现上仍有顺序约束?
来源:CSDN 原文,首次发布于 2025-04-29。