背景
狀態圖:對象的所有狀態,以及基于事件發生的狀態改變的過程;
活動圖:用例的工作流程;
部署圖:系統的軟硬件物理體系結構;
狀態圖
基本語法
元素
語法
說明
開始和結束狀態
[*]
標識開始和結束狀態
箭頭
-->
添加箭頭
隱藏描述區域
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 <>
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
部署圖
部署圖顯示了系統的硬件和安裝在硬件上的軟件,以及用于連接異構計算機之間的中間件。部署圖通常被認為是一個網絡圖或者物理架構圖。
語法
元素
語法
說明
角色
actor TaUser as taUser
申明一個角色
代理
agent agent
申明一個代理
程序包
artifact artifact
聲明一個程序包
boundary myBoundary
card card
云
cloud cloud
表示一塊私有或者共有云
component myComponent
control myControl
database mydatabase
entity entity
file file
表示文件服務器
folder folder
frame frame
interface interface
節點
node node
表示一個物理結構
package package
隊列
queue queue
消息隊列
棧
stack stack
rectangle rectangle
存儲
storage storage
usecase usercase
備注文字
[備注文字]
對組件進行文字備注
連線和箭頭
-- .. == -->
連接兩個元素
包裝
元素 名稱 {申明元素語法 }
包含關系
系統部署圖
@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群:1065694478(已滿)交流2群:163560250