plantuml-繪製狀態圖和活動圖和部署圖
阿新 • • 發佈:2020-06-24
背景
狀態圖:物件的所有狀態,以及基於事件發生的狀態改變的過程;
活動圖:用例的工作流程;
部署圖:系統的軟硬體物理體系結構;
狀態圖
基本語法
元素 | 語法 | 說明 |
---|---|---|
開始和結束狀態 | [*] | 標識開始和結束狀態 |
箭頭 | --> | 新增箭頭 |
隱藏描述區域 | hide empty description | 隱藏描述區域 |
合成狀態 | state 合成狀態名字{ 增城的狀態定義語法} | 可以巢狀狀態圖 |
狀態宣告 | state 狀態名字 : 備註 | 宣告狀態 |
fork,join | state state名字 |
分開,合併狀態 |
併發狀態 | -- or 或者雙豎線 | 狀態是併發改變的 |
箭頭方向 | top down left right | 可以控制箭頭的方向 |
單行註釋 | note 方位 of 狀態名 : 單行註釋 | 單行註釋 |
多行註釋 | note 方位 of 狀態名 換行 單行註釋 換行 end note |
多行註釋 |
登入狀態圖
@startuml
hide empty description
left to right direction
[*]-->NotLogin:首次開啟app
state NotLogin: 沒有登入
state LoginSuccess: 登入成功
state LoginFail: 登入失敗
NotLogin -->LoginSuccess: 登入
NotLogin -->LoginFail:登入
state LoginFail {
state 使用者不存在: ta校驗
state saas註冊失敗:註冊saas
state 登記使用者資訊失敗: 登記到tiananUser
state 引數校驗失敗 :校驗引數
}
state join_state <<join>>
LoginSuccess-->join_state:組裝響應引數
LoginFail-->join_state:組裝響應引數
join_state -->[*]:返回JSON資料到客戶端
@enduml複製程式碼
積分狀態圖
@startuml
scale 350 width
left to right direction
hide empty description
state noPointRecord : 沒有積分記錄
state pointZero : 積分為0
state pointOk : 有積分
[*] --> noPointRecord: 增加積分
noPointRecord --> pointZero: 初始化
pointZero --> pointOk: 增加/消耗積分
pointOk --> [*]
@enduml複製程式碼
活動圖
基本語法
元素 | 語法 | 說明 |
---|---|---|
開始 結束 | start stop | 開始結束活動 |
活動 | :活動名稱; | 定義活動 |
條件語句 | if (條件 ?) then (yes) 換行 下一個活動 else(no) endif | 條件分支 |
迴圈語句 | repeat 換行 活動 換行 repeatwhile(條件 ?) | 先執行再判斷 |
迴圈語句 | while ( 成立的條件?) 換行 活動 換行 endwhile(不成立的條件描敘) | 先判斷條件在迴圈 |
改變活動的形狀 | :活動> | 分別得到不同的形狀 |
並行處理 | fork fork again end fork | 並行處理 |
組合 | partition group名稱 { 活動圖語法} | 對活動進行分組 |
泳道 | 兩根豎線包圍 | 泳道 |
分離 | detach | 移除箭頭 |
登入活動圖
@startuml
header 登入介面活動圖
footer 登入介面活動圖
|tomcat|
start
:引數校驗]
if (引數校驗通過 ?) then (yes)
elseif (字串為空) then (no)
stop
else (其它校驗錯誤)
stop
endif
|TA服務端|
:使用者code遠端校驗;
|LX Saas|
:saas註冊登入;
|mysql|
:登記到saasUser;
|redis|
:儲存令牌到Redis;
|tomcat|
:組裝響應引數;
stop
@enduml複製程式碼
增加積分活動圖
@startuml
header 改變使用者積分介面活動圖
footer 改變使用者積分介面活動圖
|tomcat|
start
:登入態檢查;
if(令牌非法 ?) then (yes)
:返回未登入;
stop
else (合法)
endif
:接受引數,point,event ;
if(引數檢查 ?) then(合法)
else(非法)
:返回引數錯誤;
stop
endif
|mysql|
:插入積分增加詳細紀錄;
|tomcat|
:得到記錄Id;
|redis|
:按照userId查詢得到使用者積分的表記錄Id;
|tomcat|
if(記錄id不存在 ?)then(yes)
|mysql|
:插入使用者的積分記錄得到id;
:更新使用者的總積分;
else(id存在)
:更新使用者的總積分;
endif
|redis|
:刪除使用者總積分的快取;
:刪除使用者積分總條數的快取;
:刪除使用者積分明細分頁記錄的快取;
|tomcat|
:得到明細記錄的id,返回;
:返回客戶端;
stop
@enduml複製程式碼
查詢積分活動圖
@startuml
|tomcat|
start
#gold:接受引數,pageNum,pageSize|
:引數校驗;
if (引數校驗通過 ?) then(通過)
else (不通過)
#red:報錯 401 X 引數校驗不通過;
stop
endif
|redis|
:從Redis快取中查詢得到記錄的總數]
|tomcat|
if(總數不存在)then (不存在)
|mysql|
:從資料庫中查詢得到積分詳細紀錄的總數;
|redis|
:設定到redis快取中;
else
endif
|tomcat|
:得到紀錄的總條數;
if(總數是否大於0 ?)then
-[#red]->總數大於0;
fork
|redis|
:從Redis快取分頁查詢得到列表;
|tomcat|
if (redis中獲取不到資料 ?) then( 獲取不到)
|mysql|
:從資料庫中獲取得到列表;
|redis|
:設定到redis快取中;
else (獲取到了)
endif
|tomcat|
:得到分頁查詢的列表;
fork again
|redis|
:從Redis快取中查詢得到使用者總積分;
|tomcat|
if (redis中獲取不到資料 ?) then( 獲取不到)
|mysql|
:從資料庫中獲取得到使用者總積分;
|redis|
:設定到redis快取中;
else (獲取到了)
endif
|tomcat|
:得到使用者總積分;
end fork
else
|tomcat|
-[#green]->總數等於0;
#green:分頁列表為空;
#green:總積分為0;
endif
|tomcat|
:組裝響應引數\n分頁列表資料\n使用者總積分;
stop;
@enduml複製程式碼
部署圖
部署圖顯示了系統的硬體和安裝在硬體上的軟體,以及用於連線異構計算機之間的中介軟體。部署圖通常被認為是一個網路圖或者物理架構圖。
語法
系統部署圖
@startuml
header TA專案物理架構圖
footer TA專案物理架構圖
left to right direction
actor TaUser as taUser
node TaApp as taApp {
agent LxSDK as lxsdk
agent TaClient as taClient
}
folder tiananuser_folder{
cloud tiananuserCluster
node tomcat1_tiananuser
node tomcat2_tiananuser
node tomcat3_tiananuser
tiananuserCluster -down-> tomcat1_tiananuser
tiananuserCluster -down-> tomcat2_tiananuser
tiananuserCluster -down-> tomcat3_tiananuser
}
folder tianansp_folder{
cloud tiananspCluster
node tomcat1_tianansp
node tomcat2_tianansp
node tomcat3_tianansp
tiananspCluster -down-> tomcat1_tianansp
tiananspCluster -down-> tomcat2_tianansp
tiananspCluster -down-> tomcat3_tianansp
}
node Nginx as nginx
nginx --> tiananuserCluster:負載均衡/路由
nginx --> tiananspCluster:負載均衡/路由
taUser --> taApp : 訪問
taApp --> nginx:http/https
database tiananuser_database[
使用者登入資料庫
]
database tianansp_database[
運營活動資料庫
]
database redis[
redis快取
]
tiananuser_folder -down-> tiananuser_database
tianansp_folder -right-> tianansp_database
tiananuser_folder -down-> redis
tianansp_folder -up-> redis
node zk [
zookeeper註冊中心
dubbo的消費者跟生產者通訊中介軟體
定時任務elasticjob的配置中介軟體
]
tiananuser_folder -down-> zk
tianansp_folder -up-> zk
node apollo [
apollo配置中心
]
queue kafka[
kafka叢集
]
tiananuser_folder -down-> apollo
tianansp_folder -up-> apollo
tiananuser_folder -down-> kafka
tianansp_folder -up-> kafka
file fileCDN [
七牛雲或者阿里雲端儲存
]
tiananuser_folder -down-> fileCDN
tianansp_folder -up-> fileCDN
cloud ELK {
node elsticSearch
node filebeat
node kibana
}
node kubernetes{
node healmcharts[
交付服務
]
node harbor[
harbor監控管理kubernetes物件
]
}
tiananuser_folder -down-> ELK:日誌寫入
tianansp_folder -up-> ELK:日誌寫入
tiananuser_folder -down-> kubernetes:釋出和管控docker節點
tianansp_folder -up-> kubernetes:釋出和管控docker節點
@enduml複製程式碼
小結
1. 活動圖(泳道圖)實際上是程式碼流程的一個梳理,建議編碼前,先畫活動圖;
2. 狀態圖 可以列舉出所有狀態發生改變的事件,防止遺漏掉某些發生改變的情況;
3. 部署圖實際上是物理架構圖,畫的不太好看,但是卻可以在上線的時候有效的指導運維;
原創不易,轉載請註明出處。