使用plantuml,業務交接就是這么簡單


使用plantuml,業務交接就是這么簡單

你好,我是軒脈刃。

最近交接了一個業務,原本還是有挺復雜的業務邏輯的,但發現交接過來的項目大有文章,在項目代碼中有一個docs文件夾,里面躺着若干個 puml 文件,這些puml文件把業務中最核心的一些業務流程圖和時序圖都繪制清楚了。看到這個文件夾無異於發現了一個大寶藏。這種在代碼中附帶說明,代碼即一切的做法我在開源項目也是這么做的,只是不知道,原來時序圖還能使用plantuml如此編寫,在這之前,我還都只用過畫圖軟件繪制過時序圖。學之,學之,於是就進入了plantuml的坑了。

plantuml 本身就是一個開源項目,在github上有它的倉庫 https://github.com/plantuml/plantuml 和 組織 https://github.com/plantuml 。作者是Arnaud Roques,這里有一篇 https://modeling-languages.com/interview-plantuml/ 對他的訪談,聊到他創作plantuml的初衷是什么?“keeping the documentation up to date”。翻譯過來叫“讓交接項目的程序員少一些wtf”,哈,果然程序員的痛點都差不多。

plantuml 是使用java開發的,最早release版本應該是在2009年,我看github上至今仍然以1個月1個版本的速度發布release更新着。它最大的好處就是使用純文本來繪制圖形。是的,不僅僅是時序圖,它可以繪制類圖,流程圖,部署圖,甘特圖,思維導圖:

官方文檔在:https://plantuml.com/zh/

比如我現在使用最多的就是它的時序圖。(官方文檔翻譯為“順序圖”,而官方文檔的“時序圖”是時間線的意思)

https://plantuml.com/zh/sequence-diagram

這種復雜的分組流程

用下列簡單的文本就能描述出來了。

@startuml
Alice -> Bob: 認證請求
Bob -> Alice: 認證失敗
group 我自己的標簽 [我自己的標簽2]
    Alice -> Log : 開始記錄攻擊日志
    loop 1000次
        Alice -> Bob: DNS攻擊
    end
    Alice -> Log : 結束記錄攻擊日志
end
@enduml

頗為神奇。

plantuml支持的時序圖的關鍵字我整理了一下。

  • actor(角色)
  • boundary(邊界)
  • control(控制)
  • entity(實體)
  • database(數據庫)
  • collections(集合)
  • queue(隊列)
  • order(順序)
  • as (別名)
  • \n(換行)
  • skinparam responseMessageBelowArrow true (文本對齊)
  • -> --> ->o ->> (各種箭頭樣式)
  • autonumber (自動對消息編號)
  • header (頁眉)
  • footer (頁腳)
  • newpage 分頁
  • group (分組)
  • loop (循環)
  • note left ofnote right ofnote over (增加備注)
  • hnoternote 備注框形狀
  • note across (多個參與者增加備注)
  • == (分隔符)
  • ref over (引用)
  • ... 延遲
  • maxMessageSize (文本最大長度)
  • || 限定空間
  • activatedeactivate (生命線激活,取消激活)
  • destroy (生命線消失)
  • return (返回)
  • create 創建參與者
  • ++ 激活目標(可選擇在后面加上#color
  • -- 撤銷激活源
  • ** 創建目標實例
  • !! 摧毀目標實例
  • [] 進入和發出
  • ? 縮短
  • teoz 瞄點和持續
  • << >> 構造類型
  • box 包裹參與者
  • hide footbox 移除腳注
  • [skinparam](https://plantuml.com/zh/skinparam) 改變外觀

至於繪制的工具,各種ide目前已經都支持了。我自己在vscode和goland上都嘗試過繪制非常大的時序圖,goland的繪制會比vscode慢一些,甚至在這個plantuml比較復雜的時候,goland會出現內存不足,加載失敗的錯誤。但是在vscode中,沒有出現過。

在plantuml可以支持的類型中,目前最讓我覺得有用的就是時序圖和jsom/yaml 數據,時序圖不用說了,對於json和yaml,一旦非常大的配置文件,使用json/yaml來進行描述,閱讀起來是多么痛苦的事情,特別是yaml,需要對比鎖進層次。而使用plantuml,能繪制出非常通俗易懂(逼格十足)的配置文件層次圖,是非常爽的一件事情。

好了,后續交接項目的時候,別再寫一大堆的wiki了,用用plantuml吧,讓下任接手者為之驚艷一番。

參考文章:

https://modeling-languages.com/interview-plantuml/

https://plantuml.com/zh/

https://draveness.me/dsl/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM