1. 程式人生 > 程式設計 >軟體檔案寫作-plantuml畫用例圖和時序圖

軟體檔案寫作-plantuml畫用例圖和時序圖

背景

當下的軟體開發人員,不可避免的需要輸出一些軟體設計檔案,作為一個軟體工程專業畢業的工程師,最常用的設計工具就是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複製程式碼

生成的圖:

file

外部系統用例

@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複製程式碼

file

時序圖(順序圖)

展示物件跟物件之間的協作關係

語法

物件 語法 說明
箭頭和線 -> 虛線箭頭-實線箭頭> 標識參與者之間的訊息傳遞
參與者 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複製程式碼

file

改變使用者積分

@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複製程式碼

file

查詢使用者積分

@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複製程式碼

file

小結

1. plantuml可以繪製很多軟體設計檔案中的圖,包括架構圖,ER圖,UML圖;

2. 用例圖巨集觀的描述了系統的功能;

3. 時序圖比較細緻的描述了單個介面的內部處理流程;

4. 接受老專案的時候,按照UML圖去一個一個畫出來,可以儘快的hold老系統

原創不易,轉載請註明出處。