当前位置: 首页 > news >正文

理解系统交互:UML时序图

时序图

时序图(Sequence Diagram),又名序列图,是一种交互图,它显示了进程如何相互操作以及操作顺序。

Mermaid画时序图

文档
在线画图

基本结构示例

客户端 服务器 登录请求 响应结果 客户端 服务器
sequenceDiagramparticipant A as 客户端participant B as 服务器A->>B: 登录请求B-->>A: 响应结果

基本元素

  • 参与者: participant Aactor A,后加as添加别名,如:actor A as 小明
    • 在指令前添加 createdestroy 创建和销毁角色,如:create participant Carldestroy Carl
  • 消息:-实线,--虚线
    • 实线,无箭头: ->
    • 虚线,无箭头: -->
    • 实线带箭头: ->>
    • 虚线带箭头: -->>
    • 实线,有双向箭头 (v11.0.0+):<<->>
    • 虚线,有双向箭头 (v11.0.0+):<<-->>
    • 实线,末端带叉号:-x
    • 虚线,末端带叉号:--x
    • 实线,末端带开放箭头 (异步):-)
    • 虚线,末端带开放箭头 (异步):--)
  • 给每个箭头添加序列号:autonumber
  • 激活和停用框/角色: activatedeactivate
    • 还可以通过在消息箭头后附加 +/- 后缀来使用,如:
      Alice->>John: ... activate John 等同于 Alice->>+John:...
    • 对于同一个角色,可以重复激活,激活样式会堆叠表示
  • 注释: Note left of, Note right of, Note over则横跨2个参与者
    • 编辑器忽略内容型注释:以 %%(双百分号)为前缀
  • 换行:<br/>
  • 循环: loop [文本]
  • 条件分支: alt [文本]else [文本]
  • 可选路径: opt [文本]
  • 并行路径: par [文本],用and添加多个路径,可以嵌套
  • 添加分组/方框:box,box后加方框颜色,默认透明
  • 自动发生并带条件处理的操作:critical [文本],用option添加条件(可省)
  • 中断:break [文本]
  • 背景高亮:rect rgb(191, 223, 255)
  • 转义字符:格式类似这样#9829;
  • 给角色添加弹出式菜单添加链接:links actorname:{"链接名字":"链接"},可添加多个链接,点击角色弹出菜单显示

注意:像循环、分支、方框类会换行的元素,最后面需要加end结束。

复杂时序图示例

小明 抖音 服务器 数据库 小明起床刷手机 启动应用 请求认证 查询用户 返回用户数据 认证成功 显示仪表板 小明美滋滋 认证失败 显示错误 小明哭唧唧 alt [用户有效] [用户无效] 频繁请求 一直响应 loop [每分钟] 小明间接和系统服务器、数据库交互 小明 抖音 服务器 数据库
sequenceDiagramactor 用户 as 小明participant 客户端 as 抖音participant 服务器participant 数据库Note left of 用户: 小明起床刷手机用户->>客户端: 启动应用activate 客户端客户端->>服务器: 请求认证activate 服务器服务器->>数据库: 查询用户activate 数据库数据库-->>服务器: 返回用户数据deactivate 数据库alt 用户有效服务器-->>客户端: 认证成功客户端-->>用户: 显示仪表板Note right of 用户: 小明美滋滋else 用户无效服务器-->>客户端: 认证失败客户端-->>用户: 显示错误Note right of 用户: 小明哭唧唧endrect rgb(191, 223, 255)loop 每分钟用户->>客户端: 频繁请求客户端-->>用户: 一直响应endendNote over 用户,数据库: 小明间接和系统服务器、数据库交互deactivate 服务器deactivate 客户端

PlantUML画时序图

功能较多,语法复杂点,效果更灵活,效果示例如下,有需要可以深入了解一下
文档
在线画图

复杂图示例

在这里插入图片描述

@startuml
' 设置标题和页脚
title PlantUML 时序图综合示例
footer 包含所有核心元素用法' 定义参与者(多种类型)
actor 用户 as User #blue
participant "客户端" as Client
control "服务控制器" as Service
entity "数据库" as DB
database "缓存系统" as Cache
collections "消息队列" as MQ
boundary "API网关" as Gateway' 初始消息
User -> Gateway : 提交请求
activate Gateway' 分组示例
group 认证流程Gateway -> Service : 验证请求activate Service #LightBlue' 条件分支alt 验证成功Service -> DB : 查询数据activate DB #LightGreenDB --> Service : 返回结果deactivate DBelse 验证失败Service -->> User : 返回错误deactivate Servicereturnend
end' 创建新对象(正确用法)
create Service
Gateway -> Service ** : 创建服务实例
activate Service' 异步消息
Service ->> MQ : 发布事件
activate MQ #FFFFCC' 激活嵌套
Service -> Service : 内部处理
activate Service #CCCCCC
Service --> Service : 完成
deactivate Service' 循环分组
loop 3 次重试Service -> Cache : 获取缓存activate Cache #FFD700Cache --> Service : 返回空deactivate Cache
end' 注释示例
note over User, Client : 用户交互区域
note right of MQ : 异步消息系统\n解耦处理
note left of Service**服务控制器职责**:1. 请求路由2. 数据处理3. 错误处理
end note' 延迟标记
Service --> Client : 处理中...
... 网络延迟 ...
Client -> User : 请等待' 返回消息
Service <-- Cache : 缓存响应' 生命线结束
destroy Service
Gateway --> User : 最终响应' 自动编号
autonumber
Service -> DB : 保存日志
DB --> Service : 确认保存
autonumber stop' 分组颜色
group #LightPink 清理资源Service -> Cache : 清除临时数据Service ->> MQ : 发送清理事件
end
@enduml

相关文章:

  • 【Kubernetes】架构与原理:核心概念、组件协同及容器化部署解析
  • 数据库管理与高可用-PostgreSQL日常维护
  • 手机解压 7z 文件全攻略
  • 稳定币的监管
  • Etcd数据持久化机制:WAL与Snapshot解析
  • Springboot中 MyBatis-Flex TableDef 的使用
  • 宝塔安装MySQL无法远程连接【已解决】
  • 实现 Spring Boot 3的组合注解,java
  • Spring Boot + MyBatis日志前缀清除方法
  • IDEA的git提交代码提交失败,有错误0 个文件已提交,1 个文件提交失败:
  • DEM 地形分析与水文建模:基于 ArcGIS 的流域特征提取
  • 矩阵批量剪辑源码开发,OEM贴牌
  • Spring Boot 整合 Security 权限控制中的常见陷阱
  • 每日算法 -【Swift 算法】实现有效括号匹配算法
  • SpringBoot前后台交互 -- 登录功能实现(拦截器+异常捕获器)
  • SpringCloud系列 - Nacos 配置中心(二)
  • 美食推荐系统微信小程序
  • 咖啡豆缺陷检测:用YOLOv8+TensorFlow实现工业级质检系统
  • 力扣HOT100之贪心算法:45. 跳跃游戏 II
  • 3 Studying《深入理解Android卷(邓凡平)》2
  • 手机网站专业代做/长沙弧度seo
  • 建网站的目的是什么/品牌推广是做什么的
  • 中山企业网站建设公司/今天最新疫情情况
  • 做一个介绍网站多少钱/广州竞价托管
  • 做神马网站快速排/台州百度推广优化
  • 网站后台无法更/seo网站快速整站优化技术