自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PlantUML畫時序圖,真香!

開發(fā) 開發(fā)工具
PlantUML是一個開源工具,它允許我們用簡單的文本描述來創(chuàng)建UML圖,包括序列圖、用例圖、類圖、對象圖、活動圖、組件圖、部署圖、狀態(tài)圖,以及我們今天要講的時序圖。

引言

大家好,我是老三,最近在做系統(tǒng)設(shè)計的時候,發(fā)現(xiàn)要畫不少時序圖,以前我用的最順手的工具是draw.io,后來也嘗試了語雀自帶的畫圖工具,感覺畫畫簡單的圖還行,但是復(fù)雜一點的,就比較吃力了。

圖片圖片

哎,這條線怎么又歪了?布局怎么又亂了?這個條怎么又對不齊了?……手忙腳亂才畫好一張圖,這時候我就想,有沒有其它更專業(yè)的畫圖工具呢?大部分同事都在用Visio,輝哥給我推薦了PlantUML,說非常好用!這時候旁邊來了一句—— “他就是裝比!”

 還有這樣的事?那我不能讓他一個人都裝了。

最開始看下官方文檔,發(fā)現(xiàn)PlantUML類似MarkDown,似乎需要一點學(xué)習(xí)成本,簡單用了一下,曲線還是挺平緩的,上手相當(dāng)快!推薦大家也用一下試試。

一、什么是PlantUML?

PlantUML是一個多功能組件,可快速、直接地創(chuàng)建圖表。用戶可以使用簡單直觀的語言起草各種圖表。

PlantUML是一個開源工具,它允許我們用簡單的文本描述來創(chuàng)建UML圖,包括序列圖、用例圖、類圖、對象圖、活動圖、組件圖、部署圖、狀態(tài)圖,以及我們今天要講的時序圖。

圖片圖片

除了UML圖之外,PlantUML 還支持一系列其他圖表,例如JSON數(shù)據(jù)、YAML數(shù)據(jù)、EBNF圖表、架構(gòu)圖等等。PlantUML的一大優(yōu)勢,是圖表完全用文本代碼描述,這就意味著它可以作為文檔嵌入到源代碼中,也非常方便版本控制和多人協(xié)作,不管是迭代設(shè)計、文檔編寫、系統(tǒng)建模,PlantUML都能勝任。

二、快速入門

PlantUML插件

為了便捷地使用PlantUML,許多流行的IDE和代碼編輯器提供了集成PlantUML的插件,如Visual Studio Code、IntelliJ IDEA、Eclipse等。插件提供了實時預(yù)覽、語法高亮和圖表導(dǎo)出等功能,能幫助我們更快捷,更高效地畫圖,整體上IDEA的插件用起來體驗最好,但是IDEA大家懂的,太占內(nèi)存了,VS Code相對而言,用起來就會輕量很多。

  • IntelliJ IDEA:比如 "PlantUML integration" 可以讓我們直接在 IDE 中查看和編輯 PlantUML 圖表

圖片圖片

  • PlantUML integration

插件使用效果

圖片圖片

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

插件市場:

圖片圖片

  • 插件使用效果:

圖片圖片

Hello World!

我們先來看個最簡單的例子,通過-> 、-->和 :就可以在參與者之間傳遞消息,不用明確聲明參與者。

@startuml
老張 -> 老王 : 老王,你好啊
老王--> 老張: 老張,你好啊

老張 -> 老王: 最近有空一起喝茶
老張 <-- 老王: OK
@enduml

圖片圖片

三、PlantUML時序圖語法

接下來,我們看看PlantUML時序圖的一些具體語法。

聲明參與者

我們使用關(guān)鍵字participant 來聲明參與者,就可以對該參與者進行更多的控制。聲明的順序就是默認的顯示順序。我們也可以用這些關(guān)鍵字來聲明參與者,給參與者設(shè)置不同的形狀。

  • actor(角色)
  • boundary(邊界)
  • control(控制)
  • entity(實體)
  • database(數(shù)據(jù)庫)
  • collections(集合)
  • queue(隊列)

我們還可以通過 as關(guān)鍵字重命名參與者。

@startuml
participant Participant as Foo
actor       Actor       as Foo1
boundary    Boundary    as Foo2
control     Control     as Foo3
entity      Entity      as Foo4
database    Database    as Foo5
collections Collections as Foo6
queue       Queue       as Foo7
@enduml

圖片參與者

默認的顏色比較單調(diào),也可以通過#來設(shè)置參與者的顏色:

@startuml
actor Bob #blue
' The only difference between actor
'and participant is the drawing
participant Alice #SkyBlue
participant "I have a really\nlong name" as L #00ff00

Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml

上顏色的參與者上顏色的參與者

消息傳遞

在不同參與者之間,通過箭頭+:來表示消息傳遞。

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

同步消息同步消息

  • 異步消息:由發(fā)送者A指向接收者B,表示A發(fā)送后不需要等待B立即處理。
A ->> B: 異步消息文本

異步消息異步消息

  • 返回消息:通常從接收者返回到發(fā)送者,標(biāo)識一個回應(yīng)。
A <-- B: 返回消息文本

返回消息返回消息

  • 自調(diào)用:一個參與者直接發(fā)送消息給自己,表示自我處理或運算。
A ->A: 自調(diào)用
  • 自調(diào)用

生命線(Lifeline)與激活條(Activation Bar)

在時序圖中,生命線表示對象在一段時間內(nèi)的活動狀態(tài),也就是從參與者往下延伸的那條虛線。激活條用來表示參與者或?qū)ο笤谔幚砟硞€任務(wù)期間的活動狀態(tài),是生命線的一部分,矩形條形式出現(xiàn)。

  • 生命線的激活與撤銷:可以用下面這些關(guān)鍵字來控制生命線的激活與撤銷

activate: 顯示參與者的活動狀態(tài)開始

deactivate: 指示參與者的活動狀態(tài)結(jié)束。

destroy: 用于表示參與者的生命線終結(jié),通常表示對象生命周期的結(jié)束。

@startuml
participant User
User -> A: DoWork
activate A
A -> B: << createRequest >>
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: RequestCreated
deactivate B
A -> User: Done
deactivate A
@enduml

生命線的激活與撤銷生命線的激活與撤銷

  • 生命線的嵌套與顏色:我們還可以使用嵌套激活條來表示內(nèi)部調(diào)用,并可以給生命線添加顏色。
@startuml
participant User
User -> A: DoWork
activate A #FFBBBB
A -> A: Internal call
activate A #DarkSalmon
A -> B: << createRequest >>
activate B
B --> A: RequestCreated
deactivate B
deactivate A
A -> User: Done
deactivate A
@enduml

生命線的嵌套與顏色生命線的嵌套與顏色

  • 自動激活:在發(fā)送消息時自動顯示激活條。
A->B++: 激活B并發(fā)送消息

自動激活自動激活

  • 自動去激活:在接收回應(yīng)時自動隱藏激活條。
A->B++: 激活B并發(fā)送消息
A <--B--: B去激活并回應(yīng)消息

自動去激活自動去激活

分組和替代

  • 分組:用于邏輯上分組一系列交互。
group 分組名
A -> B: 消息
...
end group

分組分組

  • 替代(Alt/Else):表示基于條件的替代執(zhí)行流程。
alt 條件1
A -> B: 滿足條件1的消息
else 條件2
A -> B: 滿足條件2的消息
end

替代替代

注釋

注釋用于添加說明性文本。

  • 可以用note left of,note right of或note over來控制注釋相對節(jié)點的位置,還可以通過修改背景色來高亮顯示注釋。
@startuml
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note

note 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, Alice
This is yet another
example of
a long note.
end note
@enduml

注釋注釋

顏色

Choosing colors在 PlantUML 中,我們可以對時序圖的各個元素自定義顏色,比如參與者(actors)、對象(objects)、激活條(activation bars)等,來讓我們的時序圖更加美觀。在聲明元素時,可以直接指定顏色,格式為#顏色代碼。顏色代碼可以是不同的形式:

  • 直接指定顏色:顏色代碼可以是一個十六進制顏色值,也可以是預(yù)定義的顏色名稱。
@startuml
actor 用戶  #Green
participant 參與者  #B4A7E5

用戶-[#red]>參與者:消息
activate 參與者 #Blue

@enduml

直接指定顏色直接指定顏色

  • 使用 skinparam 設(shè)置顏色:除了直接為特定元素指定顏色外,還可以使用 skinparam 全局設(shè)置時序圖中的顏色。用這種方式更改元素的默認顏色比較方便:
@startuml
skinparam ActorBorderColor #DarkOrange
skinparam ParticipantBackgroundColor #SkyBlue

actor 用戶
participant 參與者
@enduml

使用 skinparam 設(shè)置顏色使用 skinparam 設(shè)置顏色

當(dāng)使用 skinparam 時,我們可以設(shè)置許多不同屬性的顏色,如邊框顏色(BorderColor)、背景顏色(BackgroundColor)、字體顏色(FontColor)和激活條顏色(SequenceGroupBodyBackgroundColor)。更多語法可以直接查看官方文檔:順序圖的語法和功能,目前這些內(nèi)容,已經(jīng)足夠我們常見的時序圖需求了。

四、完整實例

我們接下來看一個稍微完整一點的例子,在這個例子中,我們的需求,是要在原本的登錄的基礎(chǔ)上,引入Google登錄。

@startuml
skinparam ParticipantBackgroundColor #DeepSkyBlue

actor 用戶 as c  #DeepSkyBlue
participant "客戶端" as client
participant "服務(wù)網(wǎng)關(guān)" as ga
participant "用戶服務(wù)" as user
database "數(shù)據(jù)庫" as DB  #DeepSkyBlue
participant "Google服務(wù)" as google  #LightCoral

activate c #DeepSkyBlue
activate client #DeepSkyBlue

c->client:用戶登錄

group#LightCoral #LightCoral Google登錄客戶端流程
  client -> google : 請求Google OAuth登錄
            activate google #DeepSkyBlue
            google-->client:登錄url
            client->google:跳轉(zhuǎn)登錄頁
            google -> google : 用戶登錄
            google --> client : Google登錄Token
            deactivate google
end

|||

client -> ga : 登錄請求
note right#LightCoral:新增登錄方式,三方登錄請求實體
activate ga #DeepSkyBlue
ga ->user:請求轉(zhuǎn)發(fā)
activate user #DeepSkyBlue


alt#DeepSkyBlue 常規(guī)登錄
    user -> DB : 查詢用戶信息
    activate DB #DeepSkyBlue
    DB -> user : 用戶信息
    deactivate DB
    user->user:登錄密碼校驗

|||
else Google登錄
    group#LightCoral #LightCoral Google登錄服務(wù)端流程
          user->google:驗證token
          activate google #DeepSkyBlue
          google-->user:用戶信息
          deactivate google
          user->user:存儲或更新用戶信息
    end group
end


user-->ga:登錄結(jié)果
deactivate user
ga -> client : 響應(yīng)
deactivate ga
alt#DeepSkyBlue 成功
        client -> c : 登錄成功
else 失敗
        client -> c : 登錄失敗
end
deactivate client
|||
@enduml

登錄時序圖登錄時序圖

五、總結(jié)

PlantUML使用起來整體上還是非常舒服的,對我而言,這幾個特點讓我愛不釋手:

  • 提供了類似MarkDown的所見即所得的使用體驗,免去調(diào)整圖形之?dāng)_
  • PlantUML本質(zhì)是文本,可以進行版本控制,多人協(xié)同
  • 語雀支持文本畫圖的功能,可以嵌入PlantUML文本,支持在語雀文檔里直接修改
責(zé)任編輯:武曉燕 來源: 三分惡
相關(guān)推薦

2010-06-10 09:32:21

UML時序圖

2024-10-28 19:25:03

插件模板效率

2021-10-08 10:26:21

Java開源項目

2011-12-21 13:44:33

JavaJFreeChart

2010-07-01 15:12:34

UML時序圖

2023-08-23 19:21:38

流程圖時序圖UML

2010-07-06 14:20:41

UML時序圖

2010-07-01 15:00:53

UML時序圖

2010-07-01 14:25:31

UML時序圖

2010-07-01 14:04:23

UML時序圖

2023-05-08 08:11:49

@Component使用場景時序圖

2010-06-10 16:09:45

UML協(xié)作圖

2024-01-08 08:44:06

2022-06-01 10:15:59

業(yè)務(wù)大圖開發(fā)團隊

2010-06-10 09:41:11

UML時序圖

2010-07-12 13:09:05

UML協(xié)作圖

2010-07-01 14:13:51

UML時序圖

2021-03-19 07:07:03

Android 12Android系統(tǒng)谷歌

2010-06-29 11:16:02

UML畫類圖

2010-07-07 13:54:00

UML用例圖
點贊
收藏

51CTO技術(shù)棧公眾號