原來使用代碼也可以畫時序圖,用這個Mermaid就行,真香

本文首發于我的個人掘金博客,看到很多人都比較喜歡這篇文章,分享給大家。

個人博客主頁:https://www.aijavapro.cn

個人掘金主頁:juejin.cn/user/2359988032644541/posts

個人知識星球:? 覺醒的新世界程序員

一、背景

?在軟件開發和系統設計中,時序圖是一種重要的工具,用于描述不同組件或對象之間的交互關系。傳統上,繪制時序圖需要使用專業的圖形工具或繪圖軟件,但現在有了Mermaid文本語法,我們可以通過簡單的文本輸入快速生成時序圖。效率提升的不是一丁點,是非常一大步,我們只需要用文字的形式,將流程圖表達出來接客。本篇博客將介紹如何使用Mermaid相關的說明。

主要分享下:

1、什么是Mermaid

2、Mermaid的優勢

3、使用Mermaid繪制基本的時序圖,以系統常見的功能為例:

  • 應用程序啟動過程
  • 用戶登錄流程
  • 訂單支付履約流程

二、什么是Mermaid

Mermaid是一個開源的圖表庫,它允許我們使用簡單的文本語法來定義和繪制各種類型的圖表,包括流程圖、時序圖、甘特圖等。Mermaid支持多種輸出格式,包括SVG、PNG和PDF,使得生成和共享圖表變得非常方便。

官方地址為:https://mermaid.js.org/

官方的在線編輯效果預覽地址為:https://develop.git.mermaid.live/edit

官方的關于時序圖的說明文檔:http://mermaid.js.org/syntax/sequenceDiagram.html

為了看到一個效果,我們先看下最后的成品效果,假設想要表達一個【應用程序】啟動的過程,那么我們用該語法代碼,會生成一個如下的圖:

看著是不是有一種非常簡潔的感覺,其實這就是mermaid這種文本繪圖提供的功能,看起來非常不錯,如果我們能通過梳理一種語法來表達出我們的一個業務,那么實際上不需要拖動一些UI元素,就可以實現一個統一效果和展示的,非常可以提高我們日常開發工作中的文檔編寫,業務表達等等的一些效率。那么上面的這個圖是如何生成的呢,其實只需要寫個如下代碼就行了:

sequenceDiagramparticipant Userparticipant Applicationparticipant SpringBootparticipant DataSourceparticipant ServiceUser->>Application: 打開應用程序Application->>SpringBoot: 啟動Spring Boot應用SpringBoot->>DataSource: 初始化數據源DataSource-->>SpringBoot: 返回數據源配置SpringBoot->>Service: 注冊服務Service-->>SpringBoot: 返回服務注冊結果SpringBoot-->>Application: Spring Boot啟動成功Application-->>User: 顯示應用界面

你是不是想問,這個文本再什么軟件里編寫呢,針對這個問題,目前大多數支持MD文檔的軟件都進行了支持,我這里提供幾個方法:

2.1、使用官方的在線編輯器:

https://develop.git.mermaid.live/edit

2.2、使用飛書云文檔中的代碼繪圖

如果當前自己的企業用到了飛書,個人是非常建議使用這個的,飛書還未我們提供了一些樣式的設置,同樣針對這個圖,我們可以生成類似的如下效果

2.3、在Typora中使用

2.4、vuepress中使用

在vuepress中我們也可以使用mermaid插件,來實現業務時序圖的分享。

針對1.x版本的vuepress中,可以安裝mermaidjs的依賴來實現代碼繪圖,首先在當前項目下的package.json文件中增加上插件的依賴: "vuepress-plugin-mermaidjs": "1.9.1",然后執行下npm install安裝依賴:

"devDependencies": {"dayjs": "^1.9.7","vuepress": "^1.9.7","vuepress-plugin-baidu-tongji": "^1.0.1","vuepress-plugin-dynamic-title": "^1.0.0","vuepress-plugin-mermaidjs": "1.9.1","vuepress-plugin-one-click-copy": "^1.0.6","vuepress-theme-vdoing": "^1.12.8"}

安裝完成后,在博客的config.js文件中,引入當前插件的依賴:

plugins: [[ 'mermaidjs', { gantt: { barHeight: 40 }}]]

2.5、在HTML文檔

可以在Html文檔中或Vue中集成這個JS的地址,也是可以使用的。

三、Mermaid的優勢

當我們使用Mermaid來繪制圖表時,會帶來許多優勢,特別是對程序員來說。以下是針對程序員的10個Mermaid優勢:

  1. 簡單易用:Mermaid使用直觀的文本語法,無需復雜的圖形工具或編程技能,即可輕松生成各種類型的圖表。

  2. 快速編輯和更新:由于Mermaid圖表是以文本形式定義的,程序員可以非常快速地編輯、更新和修改圖表,節省了大量時間和精力。

  3. 版本控制友好:Mermaid圖表可以與代碼一起存儲在版本控制系統中,使得團隊成員可以輕松共享和協作,也方便進行版本比較和合并。

  4. 可嵌入到文檔和項目中:Mermaid圖表可以嵌入到各種文檔格式中,如Markdown、HTML、PDF等,方便與其他文檔和項目集成,提高文檔的可讀性和可視化效果。

  5. 支持多種輸出格式:Mermaid支持將圖表導出為多種格式,如SVG、PNG和PDF,適應不同的需求和平臺。

  6. 跨平臺支持:Mermaid可以在各種操作系統和環境下運行,包括Windows、macOS和Linux,為不同平臺的程序員提供一致的圖表繪制體驗。

  7. 豐富的圖表類型:除了時序圖,Mermaid還支持繪制流程圖、甘特圖、類圖等多種圖表類型,滿足不同場景下的需求。

  8. 易于分享和展示:Mermaid圖表可以通過鏈接、圖片或嵌入代碼的方式進行分享和展示,方便與團隊成員、客戶或其他相關人員交流和溝通。

  9. 可自定義樣式:Mermaid提供了一些基本的樣式設置,如顏色、邊框、字體等,程序員可以根據需要自定義圖表的外觀和風格,使其更符合項目要求。

  10. 社區支持和活躍度:Mermaid擁有活躍的開源社區,提供大量的文檔、示例和工具,程序員可以從中獲取幫助、學習和交流,快速掌握和應用Mermaid的技巧和最佳實踐。

這些優勢可以讓Mermaid成為程序員在繪制圖表時的首選工具,幫助他們提高效率、簡化工作流程,并提升代碼和文檔的可視化質量。

四、使用Mermaid繪制基本的時序圖

剛才我們繪制了一個應用啟動的一個簡單的流程圖,我們接下來在分享2個,每個圖都有一些特殊的效果設計和展示,大家可以多多體會和學習。

4.1、用戶登錄流程

以下是一個典型的語法描述:

sequenceDiagramautonumberactor User as 用戶participant Frontend as 前端頁面participant Backend as 后端服務器participant Database as 數據庫participant AuthProvider as 認證服務提供商User->>+Frontend: 打開登錄頁面activate FrontendFrontend->>+User: 顯示登錄表單User->>+Frontend: 輸入用戶名和密碼deactivate FrontendFrontend->>+Backend: 發送登錄請求activate BackendBackend->>+AuthProvider: 驗證用戶身份activate AuthProviderAuthProvider-->>-Backend: 返回用戶認證結果deactivate AuthProviderBackend->>-Frontend: 返回認證結果deactivate Backendactivate FrontendFrontend->>+User: 根據結果顯示成功或失敗消息User->>+Frontend: 點擊授權按鈕Frontend->>+User: 跳轉至認證服務提供商頁面deactivate Frontendactivate UserUser->>+AuthProvider: 授權登錄activate AuthProviderAuthProvider-->>-User: 返回授權結果deactivate AuthProviderUser->>-Frontend: 返回授權結果deactivate Useractivate FrontendFrontend->>+Backend: 發送授權信息activate BackendBackend->>+Database: 存儲用戶登錄狀態activate DatabaseDatabase-->>-Backend: 返回存儲結果deactivate DatabaseBackend-->>-Frontend: 返回授權結果deactivate BackendFrontend->>+User: 根據結果跳轉至相應頁面

顯示的效果如下:

以上代碼使用Mermaid語言來描述了電商用戶登錄流程。其中,參與流程的角色有:用戶(User)、前端頁面(Frontend)、后端服務器(Backend)、數據庫(Database)和認證服務提供商(AuthProvider)。演示的流程包括用戶打開登錄頁面、輸入用戶名和密碼、發送登錄請求、驗證用戶身份、返回認證結果、顯示成功或失敗消息、跳轉至認證服務提供商頁面、授權登錄、返回授權結果、存儲用戶登錄狀態等步驟。

其中autonumber指令代表了顯示操作序號,actor代表了一個時序圖的小人,participant代表了一個個參與的角色。同時->>代表了從左向右的包含箭頭的指令,-->>代表了一個包含返回值的指令。activate和deactivate代表了時序圖激活的一個區域。

4.2、訂單支付履約流程

我們使用mermaid生成了一個這樣的圖:

使用它的一個mermaid的語法如下:

---
title: 訂單支付時序圖
config:theme: basethemeVariables:primaryColor: "#ff8c1f"mermaid-container: "#ff8c1f"
---
sequenceDiagram 
autonumber
actor 用戶  
participant 訂單服務  
participant 支付服務  
participant 銀行服務  
participant 履約服務  用戶->>訂單服務: 創建訂單 
Note right of 用戶: 此處需要注意庫存問題
訂單服務->>支付服務: 發送支付請求  
支付服務->>銀行服務: 銀行扣款  
銀行服務-->>支付服務: 返回扣款結果  
支付服務-->>訂單服務: 更新訂單狀態
Note over 訂單服務,支付服務: 此處需要注意冪等性 
訂單服務->>履約服務: 發貨
Note right of 銀行服務: 此處需要注意下游履約情況
履約服務-->>用戶: 完成發貨
用戶->>訂單服務: 確認收貨  
訂單服務->>訂單服務: 更新訂單狀態為已收貨  
Note right of 訂單服務: 此處需要保障事務
訂單服務->>訂單服務: 返回更新后的訂單狀態  
訂單服務-->>用戶: 返回更新后的訂單狀態

里面用到了Note Over/Right這種語法,增加了一些黃色的標簽,體驗感覺又上了一層樓。其中通過如下指定了一個主題和顏色為橙色:

 theme: basethemeVariables:primaryColor: "#ff8c1f"mermaid-container: "#ff8c1f"

我們也可以更改為其他主題,比如綠色的主題:

看到這個綠色主題的就更加體驗好了。

關于主題的說明,官方文檔的連接如下:

http://mermaid.js.org/config/theming.html

這些指令在mermaid的官方教程文檔中都有,想深入了解的可以去學習一下:

http://mermaid.js.org/syntax/sequenceDiagram.html

五、總結

Mermaid是一個基于文本的流程圖和時序圖生成工具,對于程序員來說具有很高的價值。它可以幫助程序員更好地理解和設計程序的結構和流程,同時可以方便地與團隊成員共享和協作。使用Mermaid,程序員可以快速生成流程圖和時序圖,從而更好地表達自己的想法和設計思路,提高開發效率和代碼質量。此外,Mermaid還支持自定義樣式和主題,可以讓程序員自由地定制圖表的顏色、字體等樣式,使圖表更加美觀和易于理解。總之,Mermaid可以幫助程序員更好地溝通和協作,提高開發效率和質量,是一款非常實用的工具。

好了,看到這里,趕緊去嘗試吧,如果你安裝過typora,可以使用它。如果你有飛書云文檔,可以用它。

如果本篇文章對你有用,可以分享,點贊,收藏,關注哦。

感興趣的可以加入我的個人知識星球:覺醒的新世界程序員。

目前星球人數超過1200,最近我在星球內分享開源設計相關的系列分享。想學一點開源設計的可以一起來哦

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215716.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring數據校驗

我是南城余!阿里云開發者平臺專家博士證書獲得者! 歡迎關注我的博客!一同成長! 一名從事運維開發的worker,記錄分享學習。 專注于AI,運維開發,windows Linux 系統領域的分享! 本…

數據庫(一)| 數據庫概述、基本概念、關系型數據庫特點、超鍵候選碼等

文章目錄 1 數據庫的一些基礎概念1.1 數據庫和數據庫管理系統1.2 關系模式和關系實例1.3 數據庫模式和數據庫實例 2 數據庫組織形式2.1 數據采用文件的缺點2.2 使用數據庫管理系統的 優點 3 關系型數據庫特點4 三個層次的數據抽象Data Abstraction5 超鍵、候選碼、主碼、外碼 1…

php之jwt使用

PHP JWT(JSON Web Token)是一種用于身份驗證和授權的開放標準。JWT是一個包含有關用戶或實體身份信息的安全令牌,它由三部分組成:頭部(Header)、載荷(Payload)和簽名(Sig…

計算機網絡編程

網絡編程 Java 是第一大編程語言和開發平臺。它有助于企業降低成本、縮短開發周期、推動創新以及改善應用服務。如今全球有數百萬開發人員運行著超過 51 億個 Java 虛擬機, Java 仍是企業和開發人員的首選開發平臺。 課程內容的介紹 1. 計算機網絡基礎 2. So…

數據結構基礎介紹

一.起源及重要性 1968 年,美國的高德納 Donakl E . Kn uth 教授在其所寫的《 計算機程序藝術》第一卷《基本算法 》 中,較系統地闡述了數據的邏輯結構和存儲結構及其操作, 開創了數據結構的課程體系 ,數據結構作為一門獨立的…

B029-JDBC增強

目錄 PreparedStatement 查詢1.sql注入2.Statement分析 (面試題)3.PreparedStatement (面試題) 登錄功能的完善事務鏈接池概念實現DBCP連接池實現第一種配置方式第二種配置方式 返回主鍵BaseDao的抽取 PreparedStatement 查詢 1.sql注入 就是在sql的字符串拼接的時候&#xf…

基于單片機的定時插座在智能家居中的應用

近年來,隨著科學技術的發展迅速,人們對智能化的要求越來越高。越來越多的智能化產品進入千家萬戶,如電腦電視、掃地機器人、智能空氣凈化器等。這些家居電器和電子產品大都需要連接電源,為滿足多種用電器的正常使用,延…

DevEco Studio 生成HPK文件

DevEco Studio 生成HPK文件 一、安裝環境 操作系統: Windows 10 專業版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、生成HPK文件 生成的HPK文件存放在entry文件夾下。下圖是未生成HPK的樣式。 生成HPK:菜單Build->Build Hap(s)/APP(s)->Build Hap(s)…

啟動jar包命令

一、Windows環境 找到jar包的位置; 按shift鍵,點擊鼠標右鍵,選中在此處打開PowerShell窗口; 此時進入命令行工具 輸入java -jar .\java_web-0.0.1-SNAPSHOT.jar(注意空格)。 二、Linux環境 2.1 方式一 …

039.Python面向對象_三大特性綜合案例2

我 的 個 人 主 頁:👉👉 失心瘋的個人主頁 👈👈 入 門 教 程 推 薦 :👉👉 Python零基礎入門教程合集 👈👈 虛 擬 環 境 搭 建 :👉&…

一、微前端目標、前端架構的前生今世、微前端架構優勢和劣勢、軟件設計原則與分層

1、目標 2、前端架構的前世今生 ① 初始:無架構,前端代碼內嵌到后端應用中 ② 后端 MVC 架構:將視圖層、數據層、控制層做分離 缺點:重度依賴開發環境,代碼混淆嚴重(在調試時,需要啟動后端所有…

小型洗衣機哪個牌子質量好?迷你洗衣機排名前十名

隨著內衣洗衣機的流行,很多小伙伴在糾結該不該入手一款內衣洗衣機,專門來洗一些貼身衣物,答案是非常有必要的,因為我們現在市面上的大型洗衣機只能做清潔,無法對我們的貼身衣物進行一個高強度的清潔,而小小…

【CCF BDCI 2023】多模態多方對話場景下的發言人識別 Baseline 0.71 NLP 部分

【CCF BDCI 2023】多模態多方對話場景下的發言人識別 Baseline 0.71 NLP 部分 概述NLP 簡介文本處理詞嵌入上下文理解 文本數據加載to_device 函數構造數據加載樣本數量 len獲取樣本 getitem 分詞構造函數調用函數輪次嵌入 RobertaRoberta 創新點NSP (Next Sentence Prediction…

23種設計模式之裝飾者模式(被裝飾者,接口層,裝飾抽象層,具體裝飾者)

23種設計模式之裝飾者模式 文章目錄 23種設計模式之裝飾者模式設計思想裝飾者模式的優點裝飾者模式的缺點裝飾者模式的優化方法UML 解析預設場景 代碼釋義總結 設計思想 原文:裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能&#xff0…

應用在LED燈光控制觸摸屏中的觸摸芯片

LED燈光控制觸摸屏方法,包括:建立觸摸屏的觸摸軌跡信息與LED燈光驅動程序的映射關系;檢測用戶施加在觸摸屏上的觸摸軌跡,生成觸摸軌跡信息;根據生成的觸摸軌跡信息,調用對應的LED燈光驅動程序,控…

HJ14 字符串排序

一、題目 描述 給定 n 個字符串,請對 n 個字符串按照字典序排列。數據范圍: 1 \le n \le 1000 \1≤n≤1000 ,字符串長度滿足 1 \le len \le 100 \1≤len≤100 輸入描述: 輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字符…

智能優化算法應用:基于頭腦風暴算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用:基于頭腦風暴算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用:基于頭腦風暴算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.頭腦風暴算法4.實驗參數設定5.算法結果6.…

說說React中的虛擬dom?在虛擬dom計算的時候diff和key之間有什么關系?

虛擬 DOM(Virtual DOM)是 React 中的一種機制,通過在內存中構建一棵輕量級的虛擬 DOM 樹來代替操作瀏覽器 DOM,從而提高組件的渲染性能和用戶體驗。 在 React 中,當組件的 Props 或 State 發生變化時,Reac…

智能優化算法應用:基于蝙蝠算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用:基于蝙蝠算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用:基于蝙蝠算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.蝙蝠算法4.實驗參數設定5.算法結果6.參考文獻7.MA…

酷開科技多維度賦能營銷,實力斬獲三項大獎

在數智化新階段、廣告新生態、傳播新業態的背景下,“第30屆中國國際廣告節廣告主盛典暨網易傳媒態度營銷峰會”于11月18日在廈門國際會展中心盛大舉行。來自全國的品牌方、戰略決策者、媒體平臺和品牌服務機構等匯聚一堂。在50000+現場觀眾和數千萬線上觀…