用代碼畫時(shí)序圖,巨好用!
前言
之前阿里的朋友給我安利過一個(gè)工具,用代碼的方式生成時(shí)序圖。

感覺很不錯(cuò),所以給大家分享一下。
日常開發(fā),一般在設(shè)計(jì)階段,我們都需要畫時(shí)序圖、用例圖等等。大家平時(shí)畫圖的時(shí)候,是用draw.io還是processOn呢?用它們畫出的圖,其實(shí)都很挺好看的。但是呢,今天介紹一個(gè)款開源的畫圖神器!用代碼就能畫圖,配合IDE使用,畫圖高效簡(jiǎn)單,信手拈來,還挺美觀的。這個(gè)神器就是PlantUML。
1. PlantUML 簡(jiǎn)介
PlantUML是一個(gè)開源項(xiàng)目,可以快速編寫UML圖的工具。它可以支持編碼的方式來生成圖形??梢杂脕懋?strong style="font-weight:bold;color:#000000;">時(shí)序圖、UML用例圖、類圖、思維導(dǎo)圖、ER圖等等。
PlantUML 畫出來的圖,簡(jiǎn)潔美觀,先給大家看看,一個(gè)用PlantUML畫出來的登錄時(shí)序圖,以及對(duì)應(yīng)畫圖的代碼,如下:
/**
?*/
@startuml
title?Sequence?Diagram?of?User?login
actor?User?as?user
participant?"gateway"?as?gateway
participant?"user-core"?as?userCore
database?"MySQL"?as?mysql
database?"Redis"?as?redis
autonumber
user-> gateway:login request,param:username,password
activate?gateway
gateway->?userCore:forward?the?login?request
activate?userCore
userCore->?userCore?:check?the?login?param
userCore->?mysql:query?user?info?from?mysql?by?username
activate?mysql
mysql->?userCore:response?with?username?and?password
deactivate?mysql
userCore->userCore:compare?the?requested?password?with?the?DB's?password
userCore->?userCore:?generate?an?unique?token
userCore-->?redis:?save?the?token?to?redis
userCore->?gateway:?response?with?the?token
deactivate?userCore
gateway->?user:?login?success?with?the?token
deactivate?gateway
@enduml
登錄用例時(shí)序圖如下:

2. PlantUML的安裝使用
PlantUML的安裝很方便的.有個(gè)插件,名字是:PlantUML Integration,大家可以去IDE的插件市場(chǎng),搜索安裝即可,如下:

安裝成功后,想快速體驗(yàn)一般的話.可以新建一個(gè)項(xiàng)目,然后新建一個(gè)plantUML File文件,然后把我上個(gè)小節(jié),登錄時(shí)序圖那個(gè)代碼復(fù)制進(jìn)去,就可以看到登錄時(shí)序圖啦.
(如果是非時(shí)序圖,希望即時(shí)展示,需要安裝下
Graphviz哈)
3.如何用PlantUML 畫時(shí)序圖
什么是時(shí)序圖?
時(shí)序圖(Sequence Diagram),又名序列圖、循序圖,是一種UML交互圖。它通過描述對(duì)象之間發(fā)送消息的時(shí)間順序顯示多個(gè)對(duì)象之間的動(dòng)態(tài)協(xié)作。它可以表示用例的行為順序,當(dāng)執(zhí)行一個(gè)用例行為時(shí),其中的每條消息對(duì)應(yīng)一個(gè)類操作或狀態(tài)機(jī)中引起轉(zhuǎn)換的觸發(fā)事件。
如何用PlantUML畫時(shí)序圖呢?
你可以先新建一個(gè)PlantUML文件

然后選擇Sequence,并定義一個(gè)文件名稱

就會(huì)有默認(rèn)的時(shí)序圖生成啦.

我們照著登錄時(shí)序圖的代碼,來大概說下每個(gè)關(guān)鍵詞的意思吧.
/**
?*/
@startuml
title?Sequence?Diagram?of?User?login
actor?User?as?user
participant?"gateway"?as?gateway
participant?"user-core"?as?userCore
database?"MySQL"?as?mysql
database?"Redis"?as?redis
autonumber
user-> gateway:login request,param:username,password
activate?gateway
gateway->?userCore:forward?the?login?request
activate?userCore
userCore->?userCore?:check?the?login?param
userCore->?mysql:query?user?info?from?mysql?by?username
activate?mysql
mysql->?userCore:response?with?username?and?password
deactivate?mysql
userCore->userCore:compare?the?requested?password?with?the?DB's?password
userCore->?userCore:?generate?an?unique?token
userCore-->?redis:?save?the?token?to?redis
userCore->?gateway:?response?with?the?token
deactivate?userCore
gateway->?user:?login?success?with?the?token
deactivate?gateway
@enduml
關(guān)鍵詞解釋如下:
-
title:表示該UML用例圖的標(biāo)題 -
actor:表示人形的參與者 -
as: 使用as 關(guān)鍵字命名參與者。你可以把它理解成定義變量一樣,as后面跟著的就是變量,聲明后,我們后面就可以使用這個(gè)變量啦 -
participant:表示普通的參與者,它跟actor的主要區(qū)別是:形狀不一樣 -
database:表示參與者形狀是數(shù)據(jù)庫(kù). - 顯示的順序是怎么定義的:聲明的參與者順序?qū)⑹牵J(rèn)的)顯示順序。
-
autonumber:可以給參與者添加順序 -
->:表示繪制兩個(gè)參與者之間的信息,如果你希望是虛線,可以使用-->. -
activate和deactivate:表示參與者的生命線
當(dāng)然,PlantUML功能挺豐富的,它還可以組合消息,雖然在我的登錄時(shí)序圖還沒體現(xiàn)出來. 它提供了alt/else、opt、loop來組合消息.如下:
@startuml
Alice?->?Bob:?認(rèn)證請(qǐng)求
alt?登錄成功
????Bob?->?Alice:?認(rèn)證接受
else?某種失敗情況
????Bob?->?Alice:?認(rèn)證失敗
????group?我自己的標(biāo)簽
????Alice?->?Log?:?開始記錄攻擊日志
????????loop?1000次
????????????Alice?->?Bob:?DNS?攻擊
????????end
????Alice?->?Log?:?結(jié)束記錄攻擊日志
????end
else?另一種失敗
???Bob?->?Alice:?請(qǐng)重復(fù)
end
@enduml
對(duì)應(yīng)的時(shí)序圖如下:

4. 如何用PlantUML 畫UML用例圖
什么是用例圖?
用例圖(英語(yǔ):use case diagram)是用戶與系統(tǒng)交互的最簡(jiǎn)表示形式,展現(xiàn)了用戶和與他相關(guān)的用例之間的關(guān)系。通過用例圖,人們可以獲知系統(tǒng)不同種類的用戶和用例。用例圖也經(jīng)常和其他圖表配合使用。
如何用PlantUML畫UML用例圖呢?
你可以先新建一個(gè)PlantUML文件,然后選擇user case,并定義個(gè)文件名

就會(huì)有默認(rèn)的UML用例圖生成啦

我挑官網(wǎng)一個(gè)用例圖demo來介紹吧,代碼如下:
@startuml
left?to?right?direction
actor?Guest?as?g
package?Professional?{
??actor?Chef?as?c
??actor?"Food?Critic"?as?fc
}
package?Restaurant?{
??usecase?"Eat?Food"?as?UC1
??usecase?"Pay?for?Food"?as?UC2
??usecase?"Drink"?as?UC3
??usecase?"Review"?as?UC4
}
fc?-->?UC4
g?-->?UC1
g?-->?UC2
g?-->?UC3
@enduml
對(duì)應(yīng)生成的用例圖如下:

來看下每個(gè)關(guān)鍵詞的意思:
-
left to right direction:表示從左到右繪制用例圖 -
actor Guest as g:定義一個(gè)人形參與者,變量別名是g. -
package Professional:定義一個(gè)包package,名字為Professional.package可以用來對(duì)用例和角色分組. -
usecase "Eat Food" as UC1:定義一個(gè)用例,別名為UC1. -
fc --> UC4:表示角色fc和用例UC4關(guān)聯(lián)起來.角色和用例之間的關(guān)系,用-->來表示。
5. 如何用plantUML 畫思維導(dǎo)圖
什么是思維導(dǎo)圖?
英文是The Mind Map,又名心智導(dǎo)圖,是表達(dá)發(fā)散性思維的有效圖形思維工具 ,它簡(jiǎn)單卻又很有效同時(shí)又很高效,是一種實(shí)用性的思維工具。
寫了一個(gè)簡(jiǎn)單的思維導(dǎo)圖,代碼如下:
@startmindmap
**?計(jì)算機(jī)網(wǎng)絡(luò)面試題
***?TCP/IP十五連問
***?兩萬(wàn)字計(jì)算機(jī)面試題匯總
**?MySQL面試題
**?Redis面試題
**?大廠面試真題
***?蝦皮十五連問
***?五年Oppo后端面試真題
***?騰訊云十五連問
@endmindmap
plantUML畫思維導(dǎo)圖,還是挺簡(jiǎn)單的,大家可以看下效果

6. 如何用planUML 畫活動(dòng)流程圖
什么是活動(dòng)圖?
動(dòng)態(tài)圖(activity diagram,活動(dòng)圖)是闡明了業(yè)務(wù)用例實(shí)現(xiàn)的工作流程。
我畫了一個(gè)簡(jiǎn)單版的登錄活動(dòng)流程圖:
@startuml
title?Activity?Diagram?of?User?login
start
:user?request?login;
if?(is request param null?)?then?(N)
??:query?user?info?by?username;
??if?(is?user?info??null??)?then?(N)
????:compare?the?password;
????if?(Is?password?right?)?then?(Y)
??????:generate?a?token?,and?set?it?to?redis;
??????:response?with?login?success;
????else(N)
???????:response?with?wrong?password?code;
???????stop
????endif
??else(Y)
????:response?with?error?userinfo;
????stop
??endif
else(Y)
??:response?with?error?param;
??stop
??endif
stop
@enduml
生成的流程圖如下:

活動(dòng)圖關(guān)鍵解釋如下:
-
start表示活動(dòng)圖流程的開始 -
stop表示活動(dòng)圖流程的結(jié)束 -
:user request login;:表示活動(dòng)流程節(jié)點(diǎn)為user request login,需要加:和;的哈 -
if+then+endif表示一個(gè)完整的條件判斷
最后
本文介紹了plantUML畫圖,有興趣的小伙伴,可以移步官網(wǎng)學(xué)習(xí)哈。如果這篇文章對(duì)您有所幫助,求一鍵三連:點(diǎn)贊、轉(zhuǎn)發(fā)、在看。
最近我開通了
股東服務(wù)
,感興趣的可戳:
我開通了付費(fèi)渠道
閱讀原文 可跳轉(zhuǎn)至 消息推送平臺(tái)倉(cāng)庫(kù)
