跳到主要内容

学会用 Markdown 绘制时序图

时序图(Sequence Diagram)是 UML(统一建模语言)中的一种重要图表类型,用于描述对象之间的交互过程,展示消息在时间轴上的传递顺序。在 Markdown 中,我们可以使用 Mermaid 语法来创建专业的时序图,这对于系统设计、API 文档、业务流程分析等场景非常有用。

什么是时序图

时序图是一种交互图,它展示了系统中不同对象或参与者之间按时间顺序进行的交互过程。时序图的主要特点包括:

  • 时间轴:垂直方向表示时间流逝
  • 参与者:水平方向表示不同的对象或角色
  • 消息传递:箭头表示对象间的消息传递
  • 生命线:显示对象的生命周期

Mermaid 时序图语法

基本语法结构

在 Markdown 中使用 Mermaid 创建时序图,需要使用代码块并指定语言为 mermaid

```mermaid
sequenceDiagram
participant A as 用户
participant B as 系统
A->>B: 发送请求
B-->>A: 返回响应
```

效果:

参与者定义

语法描述示例
participant A定义参与者participant A as 用户
actor A定义外部参与者actor A as 管理员
autonumber自动编号autonumber

示例:不同类型的参与者

```mermaid
sequenceDiagram
autonumber
actor 用户
participant 前端
participant 后端
participant 数据库

用户->>前端: 点击登录
前端->>后端: 发送登录请求
后端->>数据库: 验证用户信息
数据库-->>后端: 返回用户数据
后端-->>前端: 返回登录结果
前端-->>用户: 显示登录状态
```

效果:

消息类型

基本消息类型

消息类型语法描述示例
同步消息->>实线箭头,表示同步调用A->>B: 同步请求
异步消息->>实线箭头,表示异步调用A->>B: 异步请求
返回消息-->>虚线箭头,表示返回B-->>A: 返回结果
自调用->>对象调用自身方法A->>A: 内部处理

消息样式

样式语法描述
实线箭头->>默认样式
虚线箭头-->>返回消息

示例:不同消息类型

```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务器

A->>B: 同步请求
B-->>A: 同步响应
A->>B: 异步请求
B-->>A: 重要通知
A->>B: 失败请求
B-->>A: 错误返回
```

效果:

激活和停用

激活生命线

使用 activatedeactivate 来显示对象的激活状态:

```mermaid
sequenceDiagram
participant A as 用户
participant B as 控制器
participant C as 服务层

A->>B: 请求处理
activate B
B->>C: 调用服务
activate C
C-->>B: 返回结果
deactivate C
B-->>A: 返回响应
deactivate B
```

效果:

实际应用示例

1. 用户注册流程

```mermaid
sequenceDiagram
autonumber
actor 用户
participant 前端 as 前端页面
participant API as API网关
participant 认证服务 as 认证服务
participant 数据库 as 用户数据库
participant 邮件服务 as 邮件服务

用户->>前端: 填写注册信息
前端->>API: 提交注册请求
API->>认证服务: 验证用户信息
认证服务->>数据库: 检查用户是否存在
数据库-->>认证服务: 用户不存在
认证服务->>数据库: 创建新用户
数据库-->>认证服务: 用户创建成功
认证服务->>邮件服务: 发送验证邮件
邮件服务-->>认证服务: 邮件发送成功
认证服务-->>API: 注册成功
API-->>前端: 返回成功信息
前端-->>用户: 显示注册成功
```

效果:

2. 在线支付流程

```mermaid
sequenceDiagram
autonumber
actor 用户
participant 商城 as 商城系统
participant 支付网关 as 支付网关
participant 银行 as 银行系统
participant 物流 as 物流系统

用户->>商城: 提交订单
商城->>支付网关: 发起支付请求
支付网关->>银行: 验证支付信息
银行-->>支付网关: 支付成功
支付网关-->>商城: 支付确认
商城->>物流: 创建物流订单
物流-->>商城: 物流订单创建成功
商城-->>用户: 订单确认
物流->>用户: 发送物流信息
```

效果:

3. 微服务架构交互

```mermaid
sequenceDiagram
autonumber
participant 客户端 as 客户端
participant 网关 as API网关
participant 用户服务 as 用户服务
participant 订单服务 as 订单服务
participant 库存服务 as 库存服务
participant 数据库 as 数据库集群

客户端->>网关: 获取用户订单
网关->>用户服务: 验证用户身份
用户服务->>数据库: 查询用户信息
数据库-->>用户服务: 返回用户数据
用户服务-->>网关: 用户验证通过
网关->>订单服务: 查询用户订单
订单服务->>数据库: 查询订单数据
数据库-->>订单服务: 返回订单信息
订单服务->>库存服务: 查询库存状态
库存服务->>数据库: 查询库存信息
数据库-->>库存服务: 返回库存数据
库存服务-->>订单服务: 返回库存状态
订单服务-->>网关: 返回完整订单信息
网关-->>客户端: 返回订单数据
```

效果:

高级功能

1. 循环和条件

```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务器

A->>B: 开始批量处理

loop 处理每个项目
A->>B: 发送数据项
B->>B: 处理数据
alt 处理成功
B-->>A: 返回成功
else 处理失败
B-->>A: 返回错误
end
end

A->>B: 完成批量处理
B-->>A: 处理完成
```

效果:

2. 并行处理

```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务A
participant C as 服务B
participant D as 服务C

A->>B: 请求数据A
A->>C: 请求数据B
A->>D: 请求数据C

par 并行处理
B-->>A: 返回数据A
and
C-->>A: 返回数据B
and
D-->>A: 返回数据C
end

A->>A: 合并数据
```

效果:

3. 注释和分组

```mermaid
sequenceDiagram
participant A as 用户
participant B as 前端
participant C as 后端
participant D as 数据库

Note over A,D: 用户登录流程开始

A->>B: 输入用户名密码
B->>C: 发送登录请求

Note over C,D: 后端验证阶段
C->>D: 查询用户信息
D-->>C: 返回用户数据
C->>C: 验证密码

alt 验证成功
C-->>B: 返回登录成功
B-->>A: 跳转到主页
else 验证失败
C-->>B: 返回登录失败
B-->>A: 显示错误信息
end

Note over A,D: 用户登录流程结束
```

效果:

最佳实践

1. 参与者命名

  • 使用清晰、有意义的参与者名称
  • 保持命名的一致性
  • 避免使用过长的名称

2. 消息描述

  • 使用简洁明了的消息描述
  • 包含关键的业务信息
  • 保持消息描述的准确性

3. 布局优化

  • 合理安排参与者的顺序
  • 避免消息线交叉过多
  • 保持时序图的逻辑清晰

4. 复杂度控制

  • 避免过于复杂的时序图
  • 考虑拆分为多个子图
  • 使用注释说明复杂逻辑

常见问题

1. 中文字符显示问题

如果中文字符显示异常,可以尝试:

  • 确保文件编码为 UTF-8
  • 检查 Mermaid 版本是否支持中文
  • 使用英文参与者名称,在消息中使用中文

2. 复杂时序图渲染问题

对于过于复杂的时序图:

  • 考虑拆分为多个子图
  • 简化消息和参与者
  • 使用分组和注释组织内容

3. 样式自定义

如果需要更多样式自定义:

  • 使用 Note 添加说明
  • 通过 CSS 进行进一步定制
  • 考虑使用其他图表工具

小结

Markdown 中的 Mermaid 时序图功能为我们提供了一种简单而强大的方式来创建专业的时序图。通过掌握基本的语法规则和最佳实践,我们可以轻松地创建各种类型的时序图,从简单的用户交互到复杂的系统架构。

关键要点:

  1. 基本语法:掌握参与者定义、消息类型和激活状态
  2. 实际应用:结合具体场景设计合适的时序图
  3. 高级功能:使用循环、条件、并行和注释
  4. 最佳实践:保持清晰、简洁和一致性

无论是系统设计、API 文档还是业务流程分析,时序图都是表达交互过程的有效工具。通过本文的学习,相信你已经掌握了在 Markdown 中创建时序图的基本技能,可以开始在你的文档中使用这些技巧了!

参考资源

🤔