軟體檔案寫作-plantuml畫用例圖和時序圖
阿新 • • 發佈:2020-06-24
背景
當下的軟體開發人員,不可避免的需要輸出一些軟體設計檔案,作為一個軟體工程專業畢業的工程師,最常用的設計工具就是UML,使用UML工具繪製一些軟體相關的圖,是必備技能,也是輸出的技術檔案中的重要組成部分。不關注逆向工程,這裡只關注快速的繪製對應的圖,plantuml是一款比較不錯的工具。本節先初步熟悉用例圖和時序圖。
plantuml介紹
功能介紹:
支援快速繪製
- 時序圖
- 用例圖
- 活動圖
- 類圖
- 元件圖
- 狀態圖
- 物件圖
- 部署圖
- 定時圖
還支援非UML圖:
- 架構圖
- 甘特圖
- 思維導圖
- ER圖
以及不常用的的圖:
- SDL(規範描述語言)
- 線框圖形介面
- Ditaa
- 數學公式
畫完圖之後,可以生成PNG,SVG,Latex格式的圖片;
業務場景
x專案的使用者後端服務,包括使用者登入,使用者積分模組;
用例圖
使用者角度描述系統功能
語法
系統用例圖
內部系統用例
@startuml
left to right direction
actor : 其它LX提供給TA的後端系統: as otherLxTaBackendService
note top of otherLxTaBackendService
比如tianansp
負責活動和文章的服務
比如tiananseason
負責西遊活動的服務
通過dubbo的rpc方法呼叫
end note
usecase 修改使用者積分 as changeUserPoint
usecase 查詢使用者總積分 as getUserTotalPoint
usecase 登入校驗 as getRestContextByAccessToken
otherLxTaBackendService --> getRestContextByAccessToken:獲取使用者的登入態[RPC]
otherLxTaBackendService --> changeUserPoint:活動增加或者扣減積分[RPC]
otherLxTaBackendService --> getUserTotalPoint: 查詢使用者當前總積分[RPC]
@enduml複製程式碼
生成的圖:
外部系統用例
@startuml
'left to right default
actor : ta使用者: as taUser
usecase 使用者登入 as userLogin
usecase 查詢積分明細 as findUserPointDetail
usecase 改變積分 as changeUserPointDetail
note bottom of userLogin
TA使用者登入
LX互動的後端系統
LX的saas系統
構造登入態
end note
taUser -right-> userLogin: 登入進LX交付的功能[REST]
taUser --> changeUserPointDetail : 修改積分\n閱讀文章\n分享文章\n參加活動[REST]
taUser --> findUserPointDetail : 查詢積分\n消費獲取\n明細[REST]
@enduml複製程式碼
時序圖(順序圖)
展示物件跟物件之間的協作關係
語法
物件 | 語法 | 說明 |
---|---|---|
箭頭和線 | -> 虛線箭頭-實線箭頭> | 標識參與者之間的訊息傳遞 |
參與者 | actor 角色 boundary 帶邊界 control控制 entity 實體 database 資料庫 collections 集合 participant 參與者 | 標識參與者 |
重新命名 | participant 參與者詳細名稱 as 簡稱 | 重新命名參與者 |
定義順序 | participant 參與者詳細名稱 order 排序號 | 序號越小越靠前 |
參與者含有特殊字元 | “參與者” | 雙引號包圍 |
箭頭樣式 | 丟失的訊息 ->x 實心箭頭 -> 虛箭頭 ->> 半實心箭頭 - 半虛箭頭 -\ 箭頭末尾加0 ->o |
各種箭頭 |
箭頭顏色 | 參與者1-[顏色定義]->參與者 | 改變箭頭顏色 |
訊息自動編號 | autonumber | 放在開始的位置 |
設定 | title,header,footer | header footer title在開始的地方定義 |
組合訊息條件分支 | alt/else end |
條件分支 |
組合訊息迴圈分支分支 | loop end | 迴圈 |
組合訊息 group | group end |
分組 |
單行註釋 | note 位置 :註釋內容 | 給訊息增加備註 |
多行註釋 | note 位置(right,left,over) 換行 註釋內容 換行 end note | 給訊息增加備註 |
改變註釋的形狀 | hnote 六邊形 rnote 四邊形 | 註釋的形狀 |
分隔符 | ==分割備註內容== | 橫向劃分模組 |
引用 | ref over 參與者1 參與者2 : 引用內容 | 引用 |
延遲 | ···標識延遲 ··· | 訊息固定延遲 |
空間 | 3根豎線 | 間隔 |
啟用生命線 | activate 參與者 | 啟用生命線 |
取消啟用生命線 | deactivate 參與者 | 啟用生命線 |
返回 | return 參與者 | 返回 |
建立參與者 | create 參與者 | 標識建立物件 |
快捷鍵 | ++ 啟用參與者 --取消啟用參與者 ** 建立參與者 !!銷燬參與者 | 見語法說明 |
建立盒子 | box "box的命名" #背景色 換行 參與者1 參與者2 end box | 縱向劃分模組 |
登入介面時序圖
@startuml
autonumber "<b>[00]"
title 登入介面時序圖
actor "TA使用者" as User #white
participant "TAAPP" as TAAPP #gold
box "LX交付" #gray
participant "LX交付SDK" as LXSDK #orange
participant "LX交付後端\ntiananuser" as LXServer #red
participant "LXsaas後端" as LXSaasServer #gray
end box
participant "TA後端" as TAServer #green
activate User
User -> TAAPP ++: 登入TAAPP\n開啟健康TAP頁面
==sdk對接==
TAAPP -> LXSDK ++: userId\n或者加密資訊
==後端對接==
LXSDK -> LXServer ++: 登入轉換為LX登入態介面
==TA後端對接==
LXServer <-> TAServer ++: 使用者資訊校驗\n
==對接saas==
LXServer <-> LXSaasServer ++: 註冊並登入\n到LXSaas
==構造LX專屬登入態==
LXServer -> LXServer ++: 登記使用者資訊\n儲存登入令牌到redis
LXServer -> LXSDK ++: 構造LX專屬登入態(token)
==後端對接完成==
LXSDK --> TAAPP ++: 正常使用LX互動功能
TAAPP --> User ++: 看到LX互動功能
@enduml複製程式碼
改變使用者積分
@startuml
autonumber "<b>[#]"
actor TAapp使用者 as taUser
control 閘道器 as nginx
box 介面程式 #green
boundary Web伺服器 as tomcat
end box
collections Redis as redis
database Mysql as mysql
taUser -> nginx ++ : 看文章,增加積分
nginx ->> tomcat ++ : 負載均衡策略遭到一臺tomcat
==介面處理流程開始==
tomcat --> tomcat ++ : 引數判斷
alt 引數判斷不合法
tomcat -[#red]> taUser ++ : 引數傳錯誤
else 引數合法
tomcat -> mysql ++ : 插入積分改變的明細記錄
return 表記錄id
tomcat ->redis ++ : 獲取快取中使用者對應的記錄id
alt 快取中userId對應的積分id存在
tomcat -> mysql ++ : 更新使用者的總積分
else 快取中userId對應的積分id不存在
tomcat -> mysql ++ : 查詢得到使用者對應的id
alt 使用者的總積分記錄在資料庫中存在
tomcat -> mysql ++ :更新使用者的總積分
else userId對應的積分記錄id不存在
tomcat -> mysql ++ :插入使用者的總積分記錄
end
return 使用者積分記錄對應的記錄id
tomcat -> redis ++: 使用者積分記錄對應的記錄id儲存到redis
return 無返回值
end
tomcat ->redis: 清除掉總積分快取,分頁快取,總條數快取
return 使用者增加積分明細記錄id
end
tomcat -[#green]> taUser ++ : 改變積分成功
@enduml複製程式碼
查詢使用者積分
@startuml
title 查詢使用者積分明細介面時序圖
autonumber
actor TA使用者 as taUser
boundary Web服務 as tomcat
collections Redis as redis
database Mysql as mysql
taUser -> tomcat ++ : 請求查詢總積分和明細
|||
tomcat -> tomcat ++: 引數校驗
opt 引數校驗不通過
tomcat -> taUser --: 引數校驗不通過
end
... ...
tomcat <-> redis ++: 明細總數
opt 明細總數不存在
tomcat <-> mysql ++: 查詢明細總數
tomcat <-> redis ++: 儲存明細總數
end
opt 明細總條數為 0
tomcat -> taUser ++: 查詢成功,記錄為空
end
tomcat <-> redis ++: 查詢明細記錄
opt 明細記錄為空
tomcat <-> mysql ++: 查詢明細記錄
tomcat <-> redis ++: 儲存明細記錄
end
tomcat -> tomcat ++: 明細記錄組裝到返回物件中
tomcat -> redis ++: 查詢使用者的總積分
opt 使用者的總積分
tomcat <-> mysql ++: 查詢使用者的總積分
tomcat <-> redis ++: 儲存使用者的總積分
tomcat -> tomcat ++: 使用者的總積分組裝到返回物件中
tomcat -> taUser ++: 返回積分明細
end
@enduml複製程式碼
小結
1. plantuml可以繪製很多軟體設計檔案中的圖,包括架構圖,ER圖,UML圖;
2. 用例圖巨集觀的描述了系統的功能;
3. 時序圖比較細緻的描述了單個介面的內部處理流程;
4. 接受老專案的時候,按照UML圖去一個一個畫出來,可以儘快的hold老系統
原創不易,轉載請註明出處。