在平時的工作中,經常會遇到繪製時序圖、流程圖的需求。在要求不高的時候,我們可以選擇ProcessOn、Xmind這類工具來繪製,但有時候用程式碼來畫圖可能會更高效一點,畢竟沒有比程式設計師更熟悉程式碼的了。今天給大家推薦一款畫圖工具PlantUML,可以配合IDEA使用,畫圖也更高效!
一、 PlantUML簡介
lantUML是一款開源的UML圖繪製工具,支援通過文字來生成圖形,使用起來非常高效。可以支援時序圖、類圖、物件圖、活動圖、思維導圖等圖形的繪製。下面是使用PlantUML來繪製一張流程圖,可以實時預覽,速度也很快!
二、 安裝
在IDEA中安裝PlantUML外掛的方式和其他外掛的安裝方式差不多。首先,在IDEA的外掛市場中搜尋PlantUML,然後進行安裝即可。
當然,在網路不好的時候,我們也可以點選Plguin homepage按鈕訪問外掛主頁,然後下載到本地進行安裝。
三、 使用
接下來,我們看看如何使用PlantUML外掛繪製時序圖、用例圖、類圖、活動圖、思維導圖,以及它們的一些使用技巧。
3.1 時序圖
時序圖(Sequence Diagram),是一種UML互動圖。它通過描述物件之間傳送訊息的時間順序顯示多個物件之間的動態協作。通常,在系統的Oauth2的時候,第一步就是需要搞懂Oauth2的流程,這時候有個時序圖就非常必要。下面我們使用PlantUML來繪製Oauth2中使用授權碼模式頒發令牌的時序圖。
首先,我們需要新建一個PlantUML檔案,選擇時序圖,如下圖所示。
接下來,我們可以通過PlantUML提供的語法來生成Oauth2的時序圖。
@startuml
title Oauth2令牌頒發之授權碼模式
actor User as user
participant "User Agent" as userAgent
participant "Client" as client
participant "Auth Login" as login
participant "Auth Server" as server
autonumber
user->userAgent:訪問客戶端
activate userAgent
userAgent->login:重定向到授權頁面+clientId+redirectUrl
activate login
login->server:使用者名稱+密碼+clientId+redirectUrl
activate server
server-->login:返回授權碼
login-->userAgent:重定向到redirectUrl+授權碼code
deactivate login
userAgent->client:使用授權碼code換取令牌
activate client
client->server:授權碼code+clientId+clientSecret
server-->client:頒發訪問令牌accessToken+refreshToken
deactivate server
client-->userAgent:返回訪問和重新整理令牌
deactivate client
userAgent--> user:令牌頒發完成
deactivate userAgent
@enduml
然後,在IDEAL皮膚的右邊就會對應的生成如下時序圖,是不是很炫酷。
時序圖有一些重要的引數說明如下:
- title可以用於指定UML圖的標題;
- actor可以宣告人形的參與者;
- participant可以宣告普通型別的參與者;
- as可以給參與者取別名;
- ->可以繪製參與者之間的關係,虛線箭頭可以使用-->;
- 在每個參與者關係後面,可以使用:給關係新增說明;
- autonumber我們可以給參與者關係自動新增序號;
- activate和deactivate可以指定參與者的生命線。
並且,當我們右鍵時序圖時還可以生成一個線上訪問的連結,如下圖。
直接訪問這個連結就可以線上訪問UML時序圖並進行編輯。
3.2 用例圖
用例圖(Usecase Diagram)是使用者與系統互動的最簡表示形式,主要用於展現使用者和與他相關的用例之間的關係。通過用例圖,我們可以很方便地表示出系統中各個角色與用例之間的關係。
首先,我們需要新建一個PlantUML檔案,選擇用例圖(Use Case)即可,如下所示。
@startuml
left to right direction
actor Guest as g
package Professional {
actor Chief 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
}
g--> uc1
g--> uc2
g--> uc3
fc--> uc4
@enduml
不過,執行的時候,出現瞭如下圖所示的錯誤。
這個原因是因為沒有安裝Graphviz,此時只需要安裝Graphviz即可,安裝的命令如下。
brew install Graphviz
用例圖有一些引數說明如下
- left to right direction表示按從左到右的順序繪製用例圖,預設是從上到下;
- package可以對角色和用例進行分組;
- actor可以定義使用者;
- usecase可以定義用例;
- 角色和用例之間的關係可以使用-->來表示。
3.3 類圖
類圖(Class Diagram)可以表示類的靜態結構,比如類中包含的屬性和方法,還有類的繼承結構。
首先,我們需要新建一個PlantUML檔案,選擇類圖,如下所示。
@startuml
class Person {
# String name
# Integer age
+ void move()
+ void say()
}
class Student {
- String studentNo
+ void study()
}
class Teacher {
- String teacherNo
+ void teach()
}
Person <|-- Student
Person <|-- Teacher
@enduml
然後,就可以看到程式碼生成如下類圖。
類圖有一些關鍵引數的說明如下:
- class可以定義類;
- 在屬性和方法左邊加符號可以定義可見性,-表示private,#表示protected,+表示public;
- 通過<|--表示類之間的繼承關係。
3.4 活動圖
活動圖(Activity Diagram)通常用於表示業務流程,比如電商中的下單流程,例如電商專案中購物車中生成確認單的流程。
首先,我們需要新建一個PlantUML檔案,選擇活動圖,然後新增如下流程控制程式碼。
@startuml
title 生成確認單流程
start
:獲取購物車資訊並計算好優惠;
:從ums_member_receive_address表中\n獲取會員收貨地址列表;
:獲取該會員所有優惠券資訊;
switch(根據use_type判斷每個優惠券是否可用)
case(0)
:全場通用;
if (判斷所有商品總金額是否\n滿足使用起點金額) then (否)
:得到使用者不可用優惠券列表;
stop
endif
case(-1)
:指定分類;
if (判斷指定分類商品總金額\n是否滿足使用起點金額) then (否)
:得到使用者不可用優惠券列表;
stop
endif
case(-2)
:判斷指定商品總金額是否滿足使用起點金額;
if (判斷指定分類商品總金額\n是否滿足使用起點金額) then (否)
:得到使用者不可用優惠券列表;
stop
endif
endswitch
:得到使用者可用優惠券列表;
:獲取使用者積分;
:獲取積分使用規則;
:計算總金額,活動優惠,應付金額;
stop
@enduml
然後該程式碼將生成如下活動圖,在活動圖中我們既可以用if else
,又可以使用switch
,甚至還可以使用while
迴圈。
活動圖有如下的一些說明如下:
- start和stop可以表示流程的開始和結束;
- :和;中間新增文字來定義活動流程節點;
if+then+endif
定義條件判斷;switch+case+endswitch
定義switch判斷。
3.5 思維導圖
思維導圖(Mind Map),是表達發散性思維的有效圖形工具,它簡單卻又很有效,是一種實用性的思維工具。
首先,我們需要新建一個PlantUML檔案,選擇思維導圖。
@startmindmap
+[#17ADF1] mall學習路線
++[#lightgreen] 推薦資料
++[#lightblue] 後端技術棧
+++_ 專案框架
+++_ 資料儲存
+++_ 運維部署
+++_ 其他
++[#orange] 搭建專案骨架
++[#1DBAAF] 專案部署
+++_ Windows下的部署
+++_ Linux下使用Docker部署
+++_ Linux下使用Docker Compose部署
+++_ Linux下使用Jenkins自動化部署
--[#1DBAAF] 電商業務
---_ 許可權管理模組
---_ 商品模組
---_ 訂單模組
---_ 營銷模組
--[#orange] 技術要點
--[#lightblue] 前端技術棧
--[#lightgreen] 進階微服務
---_ Spring Cloud技術棧
---_ 專案部署
---_ 技術要點
--[#yellow] 開發工具
--[#lightgrey] 擴充套件學習
@endmindmap
3.6 部署圖
部署圖(deployment diagram,配置圖)是用來顯示系統中軟體和硬體的物理架構。從部署圖中,您可以瞭解到軟體和硬體元件之間的物理關係以及處理節點的元件分佈情況。使用部署圖可以顯示執行時系統的結構,同時還傳達構成應用程式的硬體和軟體元素的配置和部署方式。
@startuml
actor actor
agent agent
artifact artifact
boundary boundary
card card
cloud cloud
component component
control control
database database
entity entity
file file
folder folder
frame frame
interface interface
node node
package package
queue queue
stack stack
rectangle rectangle
storage storage
usecase usecase
@enduml
雖然,目前可以繪製UML圖的圖形化工具很多,但是對於程式設計師來說,使用程式碼來繪圖可能更直接。上文只列舉一些常見的圖場景,如果對PlantUML感興趣,可以參考PlantUML中文官網