当前位置:首页 > 科技  > 软件

PlantUML画时序图,真香!

来源: 责编: 时间:2024-05-16 09:04:12 79观看
导读引言大家好,我是老三,最近在做系统设计的时候,发现要画不少时序图,以前我用的最顺手的工具是draw.io,后来也尝试了语雀自带的画图工具,感觉画画简单的图还行,但是复杂一点的,就比较吃力了。图片哎,这条线怎么又歪了?布局怎么又

引言

大家好,我是老三,最近在做系统设计的时候,发现要画不少时序图,以前我用的最顺手的工具是draw.io,后来也尝试了语雀自带的画图工具,感觉画画简单的图还行,但是复杂一点的,就比较吃力了。o7628资讯网——每日最新资讯28at.com

图片图片o7628资讯网——每日最新资讯28at.com

哎,这条线怎么又歪了?布局怎么又乱了?这个条怎么又对不齐了?……手忙脚乱才画好一张图,这时候我就想,有没有其它更专业的画图工具呢?大部分同事都在用Visio,辉哥给我推荐了PlantUML,说非常好用!这时候旁边来了一句—— “他就是装比!”o7628资讯网——每日最新资讯28at.com

 还有这样的事?那我不能让他一个人都装了。o7628资讯网——每日最新资讯28at.com

最开始看下官方文档,发现PlantUML类似MarkDown,似乎需要一点学习成本,简单用了一下,曲线还是挺平缓的,上手相当快!推荐大家也用一下试试。o7628资讯网——每日最新资讯28at.com

一、什么是PlantUML?

PlantUML是一个多功能组件,可快速、直接地创建图表。用户可以使用简单直观的语言起草各种图表。o7628资讯网——每日最新资讯28at.com

PlantUML是一个开源工具,它允许我们用简单的文本描述来创建UML图,包括序列图、用例图、类图、对象图、活动图、组件图、部署图、状态图,以及我们今天要讲的时序图。o7628资讯网——每日最新资讯28at.com

图片图片o7628资讯网——每日最新资讯28at.com

除了UML图之外,PlantUML 还支持一系列其他图表,例如JSON数据、YAML数据、EBNF图表、架构图等等。PlantUML的一大优势,是图表完全用文本代码描述,这就意味着它可以作为文档嵌入到源代码中,也非常方便版本控制和多人协作,不管是迭代设计、文档编写、系统建模,PlantUML都能胜任。o7628资讯网——每日最新资讯28at.com

二、快速入门

PlantUML插件

为了便捷地使用PlantUML,许多流行的IDE和代码编辑器提供了集成PlantUML的插件,如Visual Studio Code、IntelliJ IDEA、Eclipse等。插件提供了实时预览、语法高亮和图表导出等功能,能帮助我们更快捷,更高效地画图,整体上IDEA的插件用起来体验最好,但是IDEA大家懂的,太占内存了,VS Code相对而言,用起来就会轻量很多。o7628资讯网——每日最新资讯28at.com

  • IntelliJ IDEA:比如 "PlantUML integration" 可以让我们直接在 IDE 中查看和编辑 PlantUML 图表

图片图片o7628资讯网——每日最新资讯28at.com

  • PlantUML integration

插件使用效果o7628资讯网——每日最新资讯28at.com

图片图片o7628资讯网——每日最新资讯28at.com

  • VS Code:https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml

插件市场:o7628资讯网——每日最新资讯28at.com

图片图片o7628资讯网——每日最新资讯28at.com

  • 插件使用效果:

图片图片o7628资讯网——每日最新资讯28at.com

Hello World!

我们先来看个最简单的例子,通过-> 、-->和 :就可以在参与者之间传递消息,不用明确声明参与者。o7628资讯网——每日最新资讯28at.com

@startuml老张 -> 老王 : 老王,你好啊老王--> 老张: 老张,你好啊老张 -> 老王: 最近有空一起喝茶老张 <-- 老王: OK@enduml

图片图片o7628资讯网——每日最新资讯28at.com

三、PlantUML时序图语法

接下来,我们看看PlantUML时序图的一些具体语法。o7628资讯网——每日最新资讯28at.com

声明参与者

我们使用关键字participant 来声明参与者,就可以对该参与者进行更多的控制。声明的顺序就是默认的显示顺序。我们也可以用这些关键字来声明参与者,给参与者设置不同的形状。o7628资讯网——每日最新资讯28at.com

  • actor(角色)
  • boundary(边界)
  • control(控制)
  • entity(实体)
  • database(数据库)
  • collections(集合)
  • queue(队列)

我们还可以通过 as关键字重命名参与者。o7628资讯网——每日最新资讯28at.com

@startumlparticipant Participant as Fooactor       Actor       as Foo1boundary    Boundary    as Foo2control     Control     as Foo3entity      Entity      as Foo4database    Database    as Foo5collections Collections as Foo6queue       Queue       as Foo7@enduml

图片参与者o7628资讯网——每日最新资讯28at.com

默认的颜色比较单调,也可以通过#来设置参与者的颜色:o7628资讯网——每日最新资讯28at.com

@startumlactor Bob #blue' The only difference between actor'and participant is the drawingparticipant Alice #SkyBlueparticipant "I have a really/nlong name" as L #00ff00Alice->Bob: Authentication RequestBob->Alice: Authentication ResponseBob->L: Log transaction@enduml

上颜色的参与者上颜色的参与者o7628资讯网——每日最新资讯28at.com

消息传递

在不同参与者之间,通过箭头+:来表示消息传递。o7628资讯网——每日最新资讯28at.com

  • 同步消息:
A -> B: 同步消息文本

同步消息同步消息o7628资讯网——每日最新资讯28at.com

  • 异步消息:由发送者A指向接收者B,表示A发送后不需要等待B立即处理。
A ->> B: 异步消息文本

异步消息异步消息o7628资讯网——每日最新资讯28at.com

  • 返回消息:通常从接收者返回到发送者,标识一个回应。
A <-- B: 返回消息文本

返回消息返回消息o7628资讯网——每日最新资讯28at.com

  • 自调用:一个参与者直接发送消息给自己,表示自我处理或运算。
A ->A: 自调用
  • 自调用

生命线(Lifeline)与激活条(Activation Bar)

在时序图中,生命线表示对象在一段时间内的活动状态,也就是从参与者往下延伸的那条虚线。激活条用来表示参与者或对象在处理某个任务期间的活动状态,是生命线的一部分,矩形条形式出现。o7628资讯网——每日最新资讯28at.com

  • 生命线的激活与撤销:可以用下面这些关键字来控制生命线的激活与撤销

activate: 显示参与者的活动状态开始o7628资讯网——每日最新资讯28at.com

deactivate: 指示参与者的活动状态结束。o7628资讯网——每日最新资讯28at.com

destroy: 用于表示参与者的生命线终结,通常表示对象生命周期的结束。o7628资讯网——每日最新资讯28at.com

@startumlparticipant UserUser -> A: DoWorkactivate AA -> B: << createRequest >>activate BB -> C: DoWorkactivate CC --> B: WorkDonedestroy CB --> A: RequestCreateddeactivate BA -> User: Donedeactivate A@enduml

生命线的激活与撤销生命线的激活与撤销o7628资讯网——每日最新资讯28at.com

  • 生命线的嵌套与颜色:我们还可以使用嵌套激活条来表示内部调用,并可以给生命线添加颜色。
@startumlparticipant UserUser -> A: DoWorkactivate A #FFBBBBA -> A: Internal callactivate A #DarkSalmonA -> B: << createRequest >>activate BB --> A: RequestCreateddeactivate Bdeactivate AA -> User: Donedeactivate A@enduml

生命线的嵌套与颜色生命线的嵌套与颜色o7628资讯网——每日最新资讯28at.com

  • 自动激活:在发送消息时自动显示激活条。
A->B++: 激活B并发送消息

自动激活自动激活o7628资讯网——每日最新资讯28at.com

  • 自动去激活:在接收回应时自动隐藏激活条。
A->B++: 激活B并发送消息A <--B--: B去激活并回应消息

自动去激活自动去激活o7628资讯网——每日最新资讯28at.com

分组和替代

  • 分组:用于逻辑上分组一系列交互。
group 分组名A -> B: 消息...end group

分组分组o7628资讯网——每日最新资讯28at.com

  • 替代(Alt/Else):表示基于条件的替代执行流程。
alt 条件1A -> B: 满足条件1的消息else 条件2A -> B: 满足条件2的消息end

替代替代o7628资讯网——每日最新资讯28at.com

注释

注释用于添加说明性文本。o7628资讯网——每日最新资讯28at.com

  • 可以用note left of,note right of或note over来控制注释相对节点的位置,还可以通过修改背景色来高亮显示注释。
@startumlparticipant Aliceparticipant Bobnote left of Alice #aquaThis is displayedleft of Alice.end notenote right of Alice: This is displayed right of Alice.note over Alice: This is displayed over Alice.note over Alice, Bob #FFAAAA: This is displayed/n over Bob and Alice.note over Bob, AliceThis is yet anotherexample ofa long note.end note@enduml

注释注释o7628资讯网——每日最新资讯28at.com

颜色

Choosing colors在 PlantUML 中,我们可以对时序图的各个元素自定义颜色,比如参与者(actors)、对象(objects)、激活条(activation bars)等,来让我们的时序图更加美观。在声明元素时,可以直接指定颜色,格式为#颜色代码。颜色代码可以是不同的形式:o7628资讯网——每日最新资讯28at.com

  • 直接指定颜色:颜色代码可以是一个十六进制颜色值,也可以是预定义的颜色名称。
@startumlactor 用户  #Greenparticipant 参与者  #B4A7E5用户-[#red]>参与者:消息activate 参与者 #Blue@enduml

直接指定颜色直接指定颜色o7628资讯网——每日最新资讯28at.com

  • 使用 skinparam 设置颜色:除了直接为特定元素指定颜色外,还可以使用 skinparam 全局设置时序图中的颜色。用这种方式更改元素的默认颜色比较方便:
@startumlskinparam ActorBorderColor #DarkOrangeskinparam ParticipantBackgroundColor #SkyBlueactor 用户participant 参与者@enduml

使用 skinparam 设置颜色使用 skinparam 设置颜色o7628资讯网——每日最新资讯28at.com

当使用 skinparam 时,我们可以设置许多不同属性的颜色,如边框颜色(BorderColor)、背景颜色(BackgroundColor)、字体颜色(FontColor)和激活条颜色(SequenceGroupBodyBackgroundColor)。更多语法可以直接查看官方文档:顺序图的语法和功能,目前这些内容,已经足够我们常见的时序图需求了。o7628资讯网——每日最新资讯28at.com

四、完整实例

我们接下来看一个稍微完整一点的例子,在这个例子中,我们的需求,是要在原本的登录的基础上,引入Google登录。o7628资讯网——每日最新资讯28at.com

@startumlskinparam ParticipantBackgroundColor #DeepSkyBlueactor 用户 as c  #DeepSkyBlueparticipant "客户端" as clientparticipant "服务网关" as gaparticipant "用户服务" as userdatabase "数据库" as DB  #DeepSkyBlueparticipant "Google服务" as google  #LightCoralactivate c #DeepSkyBlueactivate client #DeepSkyBluec->client:用户登录group#LightCoral #LightCoral Google登录客户端流程  client -> google : 请求Google OAuth登录            activate google #DeepSkyBlue            google-->client:登录url            client->google:跳转登录页            google -> google : 用户登录            google --> client : Google登录Token            deactivate googleend|||client -> ga : 登录请求note right#LightCoral:新增登录方式,三方登录请求实体activate ga #DeepSkyBluega ->user:请求转发activate user #DeepSkyBluealt#DeepSkyBlue 常规登录    user -> DB : 查询用户信息    activate DB #DeepSkyBlue    DB -> user : 用户信息    deactivate DB    user->user:登录密码校验|||else Google登录    group#LightCoral #LightCoral Google登录服务端流程          user->google:验证token          activate google #DeepSkyBlue          google-->user:用户信息          deactivate google          user->user:存储或更新用户信息    end groupenduser-->ga:登录结果deactivate userga -> client : 响应deactivate gaalt#DeepSkyBlue 成功        client -> c : 登录成功else 失败        client -> c : 登录失败enddeactivate client|||@enduml

登录时序图登录时序图o7628资讯网——每日最新资讯28at.com

五、总结

PlantUML使用起来整体上还是非常舒服的,对我而言,这几个特点让我爱不释手:o7628资讯网——每日最新资讯28at.com

  • 提供了类似MarkDown的所见即所得的使用体验,免去调整图形之扰
  • PlantUML本质是文本,可以进行版本控制,多人协同
  • 语雀支持文本画图的功能,可以嵌入PlantUML文本,支持在语雀文档里直接修改

本文链接:http://www.28at.com/showinfo-26-88327-0.htmlPlantUML画时序图,真香!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我用 Flutter、React Native 和 Ionic 构建了相同的应用程序

下一篇: 这一次,彻底搞懵 CRDT

标签:
  • 热门焦点
Top