【PlantUML系列】序列图(二)
目录
一、参与者
二、消息交互顺序
三、其他技巧
3.1 改变参与者的顺序
3.2 使用 as 重命名参与者
3.3 注释
3.4 页眉和页脚
一、参与者
使用 participant、actor、boundary、control、entity 和 database 等关键字来定义不同类型的参与者。例如:
-
Actor(参与者):代表与系统交互的外部用户或外部系统。在用例图中,参与者通常用来表示系统的用户或利益相关者。在序列图中,参与者可以表示系统的外部用户或系统。
-
Boundary(边界):代表系统的边界,通常用来表示系统的控制范围。在用例图中,边界用来定义系统的责任和范围。在序列图中,边界可以用来表示系统的控制层,例如用户界面或系统的外部接口。
-
Control(控制):代表系统的控制结构,通常用来表示系统的内部控制机制或流程。在序列图中,控制可以用来表示系统的内部组件,如控制器或处理器。
-
Entity(实体):代表系统中的存储机制或持久化数据。在序列图中,实体通常用来表示存储数据的组件,如数据库或数据存储系统。
-
Database(数据库):代表系统中的数据库或数据存储。在序列图中,数据库用来表示系统中的持久化存储,如关系型数据库或非关系型数据库。
-
Participant(参与者):这个术语在UML中并不常用,但在PlantUML中,它通常用来表示序列图中的一个角色或对象,可以是人、系统、设备或其他任何可以发送或接收消息的实体。
@startuml
actor User
participant "浏览器" as Browser
participant "服务端" as Server #orange
@enduml
二、消息交互顺序
- 同步消息(Synchronous Message):使用实线箭头(
->)表示同步消息,发送者在发送消息后会等待接收者的响应。 - 异步消息(Asynchronous Message):使用虚线箭头(
->>)表示异步消息,发送者在发送消息后不会等待接收者的响应。 - 返回消息(Return Message):使用带有实心圆点的箭头(
--)表示返回消息,通常用于表示方法调用的返回。 - 活条(Activation Bar):当对象执行操作时,会在其生命线上显示激活条,表示对象在这段时间内是活跃的。
- 自关联消息(Self-Message):当对象需要调用自身的另一个方法时,可以使用自关联消息。
- 创建和销毁消息:使用
new关键字表示创建新对象,使用destroy关键字表示销毁对象。 - 组合片段(Combined Fragments):使用
alt、opt、loop、par等关键字来表示条件、选项、循环和并行操作。- alt(alternative,选择):表示一个选择点,有两个或多个选项,但只有一个会发生。这类似于流程图中的“决策”或“分支”。在序列图中,
alt用来表示不同的条件路径,只有其中一个分支会被执行。 - opt(optional,可选):表示一个可选的行为,即这个行为可能发生,也可能不发生。这可以用来表示某个操作是可选的,不一定在每次交互中都会出现。
- loop(loop,循环):表示一个行为会重复执行,直到某个条件被满足。这可以用来表示循环操作,如在一定条件下重复发送消息。
- par(parallel,并行):表示两个或多个操作是并行发生的,即它们会同时开始,并且可能同时结束。这可以用来表示并行处理的情况。
- alt(alternative,选择):表示一个选择点,有两个或多个选项,但只有一个会发生。这类似于流程图中的“决策”或“分支”。在序列图中,
@startuml
' 定义参与者
actor User as 用户
participant A as "组件A"
participant B as "组件B"
participant C as "组件C"' 同步消息
用户 -> A: 请求登录 (同步消息)' 异步消息
A ->> B: 发送验证请求 (异步消息)' 激活条表示A开始处理请求
activate A
A -> A: 内部处理
deactivate A' 返回消息
B --> A: 验证结果' 自关联消息
activate B
B -> B: 检查权限
deactivate B' 创建消息
A -> C: <<create>> 创建会话
activate C
C -> A: 会话创建成功' alt 表示选择,只有其中一个分支会被执行
alt 用户权限足够A -> B: 请求资源
else 用户权限不足A -> User: 显示错误
end' opt 表示可选行为,可能发生也可能不发生
opt 用户选择记住密码A -> B: 保存登录状态
end' loop 表示循环,直到满足条件
loop 每次请求A -> B: 请求数据B -> A: 返回数据
end' par 表示并行操作,两个操作会同时开始
par 数据处理A -> B: 处理数据1A -> C: 处理数据2
end' 销毁消息
A -> C: <<destroy>> 销毁会话
deactivate C' 交互结束
User <-- A: 登录完成@enduml
三、其他技巧
3.1 改变参与者的顺序
使用 order 关键字可以改变参与者的顺序,order 的顺序越小越靠前。例如:
@startuml sequence_order
' 通过order定义参与者顺序
participant Last order 30
participant Middle order 20
participant First order 10' 交互消息
First -> Middle: 第一个参与者发送消息
Middle -> Last: 中间参与者发送消息
Last -> First: 最后一个参与者发送消息
@enduml
3.2 使用 as 重命名参与者
使用 as 关键字可以为参与者指定一个别名,使得时序图更加清晰。例如:
@startuml sequence_as
actor Bob #red
participant Alice
participant "I have a really\nlong name" as L #99FF99
Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml
3.3 注释
使用 note 关键字:可以用来添加注释,它可以指定注释的放置位置,如左侧(left)、右侧(right)、上方(over)或下方(note)。
使用 ! 符号:! 符号用于添加注释,这些注释不会在生成的图表中显示。
使用 * 符号:* 符号也可以用来添加注释,这些注释同样不会在生成的图表中显示。
使用 $$ 符号:$$ 符号用于添加多行注释,这些注释不会在生成的图表中显示。
使用 left to right direction 或 right to left direction:这些关键字可以用来设置序列图的布局方向,虽然它们不是注释,但可以用来组织图表的显示方式。
@startuml' 使用note关键字添加注释
note right of User: 用户通过Web浏览器进行操作
note left of AppServer: 应用服务器处理业务逻辑
note over Server, Database: 服务器和数据库之间的交互' 使用!符号添加不会显示在图表中的注释
! 这是一段开发注释,用于说明服务器和应用服务器之间的通信协议' 使用*符号添加不会显示在图表中的注释
* 这是一段星号注释,用于提醒开发者注意某些事项' 使用$$符号添加多行注释
$$
这是一段多行注释,
可以跨越多行,
用于详细说明复杂的交互过程。
$$@enduml
3.4 页眉和页脚
使用 header 和 footer 添加页眉和页脚。例如:
@startuml
skinparam header {HeaderFontSize 18HeaderFontStyle BoldHeaderFontColor #663300HeaderBackgroundColor #FFFFCC
}
skinparam footer {FooterFontSize 12FooterFontStyle ItalicFooterFontColor #330066FooterBackgroundColor #CCFFFF
}header<b>Page Header</b>
end headerfooter<i>Page Footer</i>
end footertitle Simple Sequence Diagram
actor User as U
participant "Web Server" as WS
participant "Database" as DBU -> WS: Request
WS -> DB: Query
DB --> WS: Results
WS --> U: Response
@enduml
四、示例

相关文章:
【PlantUML系列】序列图(二)
目录 一、参与者 二、消息交互顺序 三、其他技巧 3.1 改变参与者的顺序 3.2 使用 as 重命名参与者 3.3 注释 3.4 页眉和页脚 一、参与者 使用 participant、actor、boundary、control、entity 和 database 等关键字来定义不同类型的参与者。例如: Actor&…...
WPF+MVVM案例实战与特效(三十四)- 日志管理:使用 log4net 实现高效日志记录
文章目录 1、概述2、日志案例实现1、LogHelper 类详解2、代码解释3、配置文件4、实际应用案例场景 1:记录系统运行日志场景 2:记录数据库操作日志场景 3:记录 HTTP 请求日志5、总结1、概述 在WPF软件开发中,良好的日志记录机制对于系统的调试、维护和性能优化至关重要。lo…...
前端测试框架 jasmine 的使用
最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前。通过对比我们选择了 Karma jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 Karma jasmine 前提是必须安装 Nodejs。 安装好 Nodejs ,使用 npm 安装好必要…...
Qwen2-VL视觉大模型微调实战:LaTex公式OCR识别任务(完整代码)
《SwanLab机器学习实战教程》是一个主打「开箱即用」的AI训练系列教程,我们致力于提供完善的数据集、源代码、实验记录以及环境安装方式,手把手帮助你跑起训练,解决问题。 Qwen2-VL是通义千问团队最近开源的大语言模型,由阿里云通…...
「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。 关键词 小学奥数Python Cangjie几何计算 一、题目描述 编写一个程序&#…...
Groom Blender to UE5
Groom Blender to UE5 - Character & Animation - Epic Developer Community Forums Hello, 你好, While exporting my “groom” from blender to UE5, I notice that the curves have a minimal resolution in Unreal. However I would like to get the same …...
开发一套ERP 第十弹 图片作为配置文件,本地读取图片,定时更新图片类型
echo Hello World在同一数据库中在建一个图床数据表,产品一,一对应,图片命名 最优的方案,使用 rust 在构建一个 http server 用于管理非数据库资源,也可以将来对接不同的图床,部署方便 考虑到数据库资源和图片资源,都可以被远程访问这种方法最佳...
第七十六条:努力保持故障的原子性
当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中,即使失败是发生在执行某个操作的过程中间。对于受检的异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一般而言,失败的方…...
Word分栏后出现空白页解决方法
Word分栏后出现空白页解决方法 只需要在后面的空白页设置相同的页面布局(分栏格式),然后按Ctrl backspace即可删除该空白页。 参考文章:Word分栏出现空白怎么解决。...
基于HTML和CSS的校园网页设计与实现
摘要 随着计算机、互联网与通信技术的进步,Internet在人们的学习、工作和生活中的地位也变得越来越高,校园网站已经成为学校与学生,学生与学生之间交流沟通的重要平台,对同学了解学校内发生的各种事情起到了重要的作用。学校网站…...
【算法day7】字符串:反转与替换
题目引用 反转字符串反转字符串II替换数字 1.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&am…...
分布式存储厂商
分布式存储 以下是对分布式存储厂商XSKY星辰天合、IOMesh(SmartX)、SmartX的深度对比: 1. XSKY星辰天合 产品与服务:XSKY星辰天合提供统一存储平台,支持块、文件和对象存储服务。已为近2400家大型政企机构实施部署&…...
合合信息扫描全能王线下体验活动:科技与人文的完美交融
文章目录 前言签到欢迎仪式产品体验智能高清滤镜去除透字效果照片高清修复 破冰行动会议感受 前言 作为合合信息旗下扫描全能王的忠实粉丝,上周,我很荣幸参与了扫描全能王“扫出你的能量buff”快闪活动及技术交流会。这次活动的不仅让我对这款强大的文档…...
单链表在Go语言中的实现与操作
简介 单链表是一种基本的线性数据结构,由节点组成,每个节点存储数据和指向下一个节点的指针。今天,我们将深入探讨如何在Go语言中实现和操作单链表。 单链表的优缺点 优点: 动态内存分配,灵活性高。插入和删除节点操…...
网关整合sentinel无法读取nacos配置问题分析
sentinel无法读取nacos配置问题分析 1.spring-cloud-gateway整合sentinel2.问题现象3.原因猜测4.源码分析4. 结语 最近公司需要上线一个集约项目,虽然为内网项目,但曾经有过内网被攻破,导致内部系统被攻击的案例,且集约系统同时在…...
简化XPath表达式的方法与实践
XPath表达式用于在XML或HTML文档中定位元素。有时候,XPath表达式可能会变得非常冗长和复杂,这不仅难以阅读和维护,而且也可能影响性能。因此,学会如何简化XPath表达式是非常重要的。本文将介绍几种简化XPath表达式的方法ÿ…...
【文件下载】接口传递文件成功和失败时,前端的处理方式
问题 使用bold类型从后端接口获取文件流,获取成功的时候通过a标签下载;失败的时候,后端返回的是json,这个时候就无法向用户展示后端返回的错误提示信息。 思路 根据返回类型是否为 application/json 区分是否返回成功ÿ…...
html+css网页设计马林旅行社移动端4个页面
htmlcss网页设计马林旅行社移动端4个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...
视频 的 音频通道提取 以及 视频转URL 的在线工具!
视频 的 音频通道提取 以及 视频转URL 的在线工具! 工具地址: https://www.lingyuzhao.top/toolsPage/VideoTo.html 它提供了便捷的方法来处理视频文件,具体来说是帮助用户从视频中提取音频轨道,并将视频转换为可以通过网络访问的URL链接。无…...
容易被遗忘的测试用例
网络服务器启动了吗?应用程序服务器启动了吗?数据库上线了吗?测试数据是否预先加载到数据库中?每当我们准备开始测试应用程序时,一切都应该已经准备妥当。 然而,当测试开始后,我们可能会漏掉一些…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
