PlantUML——时序图

PlantUML时序图

背景

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图,用于描述对象之间发送消息的时间顺序,显示多个对象之间的动态协作。时序图的使用场景非常广泛,几乎各行各业都可以使用。下面,简单介绍如何使用plantUML插件,来绘制时序图。

PlantUML插件下载

首先,打开IDEA,找到setting,然后选择plugins,搜索PlantUML,找到如下插件,点击下载,然后重启idea,即可使用plantUML插件。
在这里插入图片描述
如果使用的是VSCode,选择扩展,然后搜索PlantUML,下载即可使用
在这里插入图片描述

PlantUML绘制时序图

首先创建一个PlantUML 文件,然后选择Sequence模板
在这里插入图片描述
在这里插入图片描述
创建完毕后,会自动生成一个时序图的模板
在这里插入图片描述

时序图绘制基础

下面我们以用户注册为例,绘制一个基础的时序图,并依次讲解每一个元素的具体含义。在注册链路中,首先用户在浏览器上填写注册表单,点击发送按钮,会调用后端的注册服务去创建注册信息,在注册服务中,会调用账号服务创建对应的账号信息,以及绑定一些关联关系,创建成功后,调用登录服务去生成对应的登录token,下发登录态,最后发送相关的注册消息给下游。整体的时序图代码如下所示:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "用户" as User
participant "浏览器" as browser
participant "register-service" as registerService
participant "user-service" as userService
participant "login-service" as loginService
participant "下游" as merchantUser -> browser:填写注册表单,点击注册
browser -> registerService: registerFacade#register
registerService -> userService: accountFacade#createAccount
userService --> registerServiceregisterService -> loginService: loginService#login
loginService --> registerService: 登录态tokenregisterService ->> merchant: 发送注册成功消息
registerService --> browser
browser --> User
@enduml

在这里插入图片描述
其中,上述代码相关的元素,表示的含义如下:

元素含义
actor系统角色,可以是人或其他系统,子系统,以一个小人图标表示
participant参与者,一般是调用的服务或组件
->同步消息,消息的发送者将控制传递给消息的接收者
- - >返回消息,表示从过程调用返回
->>异步消息,消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接收者返回消息或控制
生命线

在时序图中,一般我们还会对每一个参与的角色,画上相关的生命线,用于表示对象的调用过程。在plantUML中,我们用activate表示激活生命线,用deactivate表示终止生命线。
我们改造刚才的代码,改造结果如下:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "用户" as User
participant "浏览器" as browser
participant "register-service" as registerService
participant "user-service" as userService
participant "login-service" as loginService
participant "下游" as merchantactivate User
User -> browser:填写注册表单,点击注册
activate browser browser -> registerService: registerFacade#register
activate registerServiceregisterService -> userService: accountFacade#createAccount
activate userService
userService --> registerService
deactivate userServiceregisterService -> loginService: loginService#login
activate loginService
loginService --> registerService: 登录态token
deactivate loginServiceregisterService ->> merchant: 发送注册成功消息
registerService --> browser
deactivate registerServicebrowser --> User
deactivate browserdeactivate User
@enduml

在这里插入图片描述

颜色

在plantUML中,我们可以通过设置消息、文本、生命线的问题,来提升时序图的视觉效果,以更好地区分每个系统以及系统与系统之间地调用关系,突出时序图的重点信息。
对于actor和参与者,我们在定义的时候设置颜色信息,如下代码所示:

actor "用户" as User #orange
participant "浏览器" as browser #6ACCEF
participant "register-service" as registerService #6ACCEF
participant "user-service" as userService #6ACCEF
participant "login-service" as loginService #6ACCEF
participant "下游" as merchant #6ACCEF

对于消息,我们在第一个"-"后面,通过加上[#颜色]这种方式,来设置对应的消息颜色,如下代码所示:

registerService -[#red]>> merchant: 发送注册成功消息

对于文本信息,我们通过在文本前面,加上color:#颜色的方式,设置文本内容颜色,如下代码所示:

registerService -[#red]>> merchant: <color:#red>发送注册成功消息

对于生命线,我们在激活生命线的时候,在后面加上颜色信息,如下代码所示:

activate User #orange
activate browser #6ACCEF

整体改动参考代码如下:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "用户" as User #orange
participant "浏览器" as browser #6ACCEF
participant "register-service" as registerService #6ACCEF
participant "user-service" as userService #6ACCEF
participant "login-service" as loginService #6ACCEF
participant "下游" as merchant #6ACCEFactivate User #orange
User -> browser:填写注册表单,点击注册
activate browser #6ACCEFbrowser -> registerService: registerFacade#register
activate registerService  #6ACCEFregisterService -> userService: accountFacade#createAccount
activate userService  #6ACCEF
userService --> registerService
deactivate userServiceregisterService -> loginService: loginService#login
activate loginService #6ACCEF
loginService --> registerService: 登录态token
deactivate loginServiceregisterService -[#red]>> merchant: <color:#red>发送注册成功消息
registerService --> browser
deactivate registerServicebrowser --> User
deactivate browserdeactivate User
@enduml

在这里插入图片描述

条件判断

在时序图中,有时候我们会涉及到一些条件判断内容,对于条件判断,我们可以使用alt-else-end来区分不同条件下的调用信息。以登录为例,在登录的时候,如果账密校验通过后,会判断当前账号的状态,如果状态校验通过,生成相关的登录态token,如果校验不通过,那么生成核身token,用户拿到核身token后,去完成发送验证码和校验验证码等核身操作,核身通过后,才能正常登录,整体流程如下:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "User" as user
participant "login-service" as loginService
participant "account-service" as accountService
participant "token-service" as tokenServiceuser -> loginService:账密登录
loginService -> accountService:密码校验
accountService --> loginService
loginService -> accountService:状态校验
alt 状态校验通过accountService --> loginServiceloginService -> tokenService:生成登录态tokentokenService --> loginService
else 账号被盗accountService --> loginServiceloginService -> tokenService:生成核身tokentokenService --> loginService
endloginService --> user
@enduml

在这里插入图片描述
对于不同的条件片段,也可以设置对应的背景颜色,用于区分,如下所示:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "User" as user
participant "login-service" as loginService
participant "account-service" as accountService
participant "token-service" as tokenServiceuser -> loginService:账密登录
loginService -> accountService:密码校验
accountService --> loginService
loginService -> accountService:状态校验
alt #6ACCEF  状态校验通过accountService --> loginServiceloginService -> tokenService:生成登录态tokentokenService --> loginService
else #orange 账号被盗accountService --> loginServiceloginService -> tokenService:生成核身tokentokenService --> loginService
endloginService --> user
@enduml

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19309.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

算法——链表相交(leetcode23)

链表相交这题就是找出两个相交链表相交的节点并返回 如上图假设上方第一个节点是链表A的头结点下方第一个节点是链表B的头结点 解法有以下两种 方法一(移动长链表指针后同步移动两个链表的指针直至相等) 也就是先遍历链表A和链表B的长度接着得到链表A和B长度的差值然后领长链…

STM32单片机锁死

自己画了一块stm32f407板子&#xff0c;外部晶振用了25MHz&#xff0c;烧写了8MHz的程序&#xff0c;第一次烧写成功&#xff0c;第二次开始识别不到芯片&#xff0c;第一次烧写成功由于外部晶振为25Hz&#xff0c;芯片内频率计算器却是按照8MHz写的&#xff0c;所以得出最后的…

Windows文件资源管理器增强工具

引言&#xff1a; 资源管理器在我们使用电脑时是经常用到的&#xff0c;各种文件资源等的分类整理都离不开它。但是Windows Explorer确实不好用&#xff0c;不智能&#xff0c;不符合人体工程学。特别是在一些场合&#xff0c;在打开的一堆文件夹里&#xff0c;想从中找到自己要…

聚类中3个解空间的描述

深度学习中做分类任务时&#xff0c;我们常常根据最后的全连接层得到一组向量A&#xff08;比如&#xff1a;[0.9, 0.7, 0.2]&#xff09;&#xff0c;这组向量经过归一化得到向量B(比如&#xff1a;[0.5&#xff0c; 0.3&#xff0c; 0.2])&#xff0c;再根据B向量采用概率最大…

Empirical analysis of hardware-assisted GPU virtualization

​ 年份&#xff1a;2019 作者&#xff1a;Anshuj Garg 会议&#xff1a;ESCI 出版商&#xff1a;IEEE 摘要 本篇文章对vGPU虚拟化的性能开销、调度算法的影响、同构与异构工作负载的干扰效应&#xff0c;以及PCI直通与vGPU的性能差异进行了研究。结果表明&#xff0c;vGP…

Java面试题2024-Java基础

Java基础 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 3、与平台无关性&#xff08;JVM是Java跨平台使用的根本&#xff09; 4、可靠安全 5、支持多线程 2、…

【案例分享】运用 Infragistics Ultimate UI 让工业物联网 IIoT 数据流更易于访问

客户概况 贝克休斯旗下的 Bently Nevada 是状态监测和资产保护领域的全球领导者。该公司拥有 60 多年的专业知识&#xff0c;在全球安装了超过 600 万个传感器和 100,000 个机架监测系统。 如今&#xff0c;Bently Nevada的开发团队正在使用现代 UI 工具包来增强他们的系统&a…

PHM技术:基于支持向量机的智能故障诊断 | 行星齿轮箱智能故障诊断

目录 1.数据获取 2.特征提取与选择 3.健康状态识别 1.数据获取 用的行星齿轮箱数据采集自图1中的多级齿轮传动系统实验台中&#xff0c;在实验过程中&#xff0c;分别模拟了8种行星齿轮箱的健康状态&#xff0c;包括正常、第一级太阳轮点蚀、第一级太阳轮齿根裂纹、第一级…

推荐一款Windows系统精简工具:NTLite

NTLite是一款可以对Windows系统优化的安装工具&#xff0c;使用这款完全中文的NTLite授权注册版让你不会因为注册或者语言导致无法正常的使用&#xff0c;如果你正需要马上下载使用吧。 NTLite基本简介 NTLite 中文版可以用来做什么&#xff0c;它其实是一款 Windows 系统精简…

ESP-IDF VScode 项目构建/增加组件 新手友好!!!

项目构建 1.新建文件夹&#xff0c;同时在该文件夹内新建.c和.h文件 如图所示&#xff0c;在components中新建ADC_User.c、ADC_User.h、CMakeLists.txt文件。当然这里你也可以不在components文件夹内新建文件&#xff0c;下面会说没有在components文件夹内新建文件构建项目的方…

Node Exporter 可观测性最佳实践

Node Exporter 介绍 Node Exporter 是一个开源的 Prometheus 指标收集器&#xff0c;它提供了大量关于宿主机系统的关键指标&#xff0c;如 CPU、内存、磁盘和网络使用情况。在 Kubernetes 环境中&#xff0c;Node Exporter 对于监控集群节点的健康状况至关重要。本文将介绍如…

Spring Boot汽车资讯:科技与速度的交响

3系统分析 3.1可行性分析 通过对本汽车资讯网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本汽车资讯网站采用SSM框架&#xff0c;JAVA作为开发语言&#…

外卖跑腿小程序源码如何满足多样需求?

外卖跑腿平台已经成了当代年轻人的便捷之选&#xff0c;校园中也不例外&#xff0c;那么外卖、跑腿小程序就需要满足用户多样化的需求&#xff0c;而这背后的源码扮演者最重要的角色。 用户类型的多样性 1.对上班族而言&#xff0c;他们希望外卖小程序能够快速下单、准确配送…

GeeRPC第一天 服务端与消息编码(1)

RPC 1. 系统架构图解释&#xff08;Graph&#xff09; 架构层次 RPC框架核心功能&#xff1a;这是系统的最上层&#xff0c;涵盖了框架的主要功能模块&#xff0c;直接与底层服务和用户交互。 服务层&#xff1a;主要负责服务的注册、发现和治理。 服务注册&#xff1a;将服务…

如何在谷歌浏览器中开启离线模式

在数字化时代&#xff0c;互联网已经成为我们生活中不可或缺的一部分。然而&#xff0c;有时候我们可能会遇到没有网络连接的情况&#xff0c;这时谷歌浏览器的离线模式就显得尤为重要。本教程将详细介绍如何在谷歌浏览器中轻松开启离线模式&#xff0c;并附带一些相关教程指南…

【进阶系列】正则表达式 #匹配

正则表达式 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使 Python 语言拥有全部的正则表达式功能。 一个正则表达式的匹配工具&#xff1a;regex101: build, test, and debug regex s "C:\\a\\b\\c" pri…

C++使用Alglib数学库进行非线性最小二乘拟合

目录 一、前言 二、主要函数分析 2.1 lsfitcreatef 2.2 lsfitsetcond 2.3 lsfitfit 2.4 lsfitresults 三、基础代码实现 3.1 定义待拟合函数 3.2 数据拟合 四、可视化代码实现 4.1 拟合h文件 4.2 拟合cpp文件 4.2 代码实验 一、前言 本文记录基于Alglib进行非线性…

Spring Boot汽车世界:资讯与技术的交汇

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

算法--“找零方案”问题

def main():d [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0] # 存储各种硬币的面值d_num [] # 存储每种硬币的数量total_money 0 # 收银员拥有的总金额# 输入每种硬币的数量temp input(请输入每种零钱的数量&#xff08;以空格分隔&#xff09;:)d_num0 temp.split() # 以空…

【UGUI】Unity 背包系统实现02:道具信息提示与显示

在游戏开发中&#xff0c;背包系统是一个常见的功能模块&#xff0c;用于管理玩家拾取的物品。本文将详细介绍如何在 Unity 中实现一个简单的背包系统&#xff0c;包括道具信息的提示和显示功能。我们将通过代码和场景搭建来逐步实现这一功能。 1. 功能需求清单 在实现背包系…