狀態圖:對象的全部狀態,以及基於事件發生的狀態改變的過程;
活動圖:用例的工做流程;
部署圖:系統的軟硬件物理體系結構;node
元素 | 語法 | 說明 |
---|---|---|
開始和結束狀態 | [*] | 標識開始和結束狀態 |
箭頭 | --> | 添加箭頭 |
隱藏描述區域 | 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
部署圖顯示了系統的硬件和安裝在硬件上的軟件,以及用於鏈接異構計算機之間的中間件。部署圖一般被認爲是一個網絡圖或者物理架構圖。mysql
元素 | 語法 | 說明 |
---|---|---|
角色 | 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
- 活動圖(泳道圖)其實是代碼流程的一個梳理,建議編碼前,先畫活動圖;
- 狀態圖 能夠列舉出全部狀態發生改變的事件,防止遺漏掉某些發生改變的狀況;
- 部署圖其實是物理架構圖,畫的不太好看,可是卻能夠在上線的時候有效的指導運維;
原創不易,轉載請註明出處。nginx