使用VSCode+PlantUML+C4-Model快速畫架構(gòu)圖

使用VSCode+PlantUML+C4-Model快速畫架構(gòu)圖

關(guān)于C4-Model

最近在看C4-Model掸绞,它的理念很實(shí)用髓废,架構(gòu)圖要明確面向人群震缭,根據(jù)面向人群的不同嘶窄,產(chǎn)出四幅圖來描述一個(gè)系統(tǒng)或者一個(gè)架構(gòu)。System Context --> Container --> Component --> Code 四個(gè)層次脊僚。

層級

具體每個(gè)層級的圖形用來描述什么相叁,可以參見這里:https://www.infoq.cn/article/C4-architecture-model

本文的關(guān)注點(diǎn)更小,不討論這些道的層面,而是描述怎么做钝荡,也就是術(shù)的層面街立。

安裝vscode

其實(shí)直接使用plantUML也可以,不過plantUML的界面比較簡陋埠通,功能也比較弱赎离,而vscode中有plantUML的插件,使用起來更順手端辱。

vscode的安裝很簡單梁剔,MAC下直接https://code.visualstudio.com/Download下載dmg文件安裝到Application即可。

安裝vscode的plantUML&Graphviz插件

plantUML是一款可以通過文字舞蔽、代碼畫UML圖的工具荣病,不需要考慮態(tài)度配色、位置等因素渗柿,方便快速个盆。而vscode上對應(yīng)的插件功能類似。

Graphviz是一款圖形化預(yù)覽插件朵栖,plantUML默認(rèn)只能渲染出時(shí)序圖颊亮,對于比較復(fù)雜的圖形,則需要Graphviz插件協(xié)助渲染陨溅。

直接在vscode的marketplace中搜索安裝终惑,如下所示:

file

PS: 運(yùn)行plantUML需要Java環(huán)境,請自行安裝jdk并配置環(huán)境變量门扇。

如果未安裝Graphviz雹有,在渲染的時(shí)候會報(bào)錯(cuò):

/opt/local/bin/dot File not exist.

配置C4-model對應(yīng)的snippets

vscode有工作區(qū)的概念,也就是一個(gè)工作目錄臼寄。通過File-->open... 打開一個(gè)目錄霸奕,就會默認(rèn)把這個(gè)目錄作為一個(gè)工作區(qū)。

在工作區(qū)中會默認(rèn)讀取當(dāng)前目錄下的一個(gè)隱藏子目錄 .vscode 來獲取當(dāng)前工作區(qū)的設(shè)置脯厨,在這里我們只自定義C4-Model的snippets(代碼片段)铅祸,用于輔助畫圖時(shí)語句編寫。

首先從github上拉取C4-PlantUML項(xiàng)目源碼合武,如下

git clone https://github.com/RicardoNiepel/C4-PlantUML

可以看到其代碼結(jié)構(gòu):

file

我們需要的snippets文件就在這里,直接復(fù)制這個(gè)目錄到工作區(qū)即可涡扼,比如我的工作區(qū):

file

實(shí)操畫圖

當(dāng)畫圖可以用代碼實(shí)現(xiàn)時(shí)稼跳,是不是覺得有點(diǎn)興奮,普通的UML圖形語法可以參考這里http://plantuml.com/zh/sitemap-language-specification

我這里只針對C4-Model來簡單介紹下吃沪。

常見元素

在C4-Model中有幾個(gè)元素汤善,都比較直觀:

Person:人員
System:系統(tǒng),包含DB、Application红淡、WebPage等
System_ext:外部系統(tǒng)
System_Boundary:系統(tǒng)邊界不狮,在這個(gè)邊界中的都是系統(tǒng)的組成部分,里面一般是Container級別的組件
Container:容器在旱,不是Docker之類的容器摇零,簡單點(diǎn)可以直接理解為System的組成部分,比如DB桶蝎、Application等
ContainerDb:DB
Container_Boundary:容器邊界驻仅,在這個(gè)邊界范圍內(nèi)的都是容器的組成部分,里面一般都是Component級別的數(shù)據(jù)
Component:組件登渣,比如一個(gè)Controller噪服,一個(gè)Service邏輯處理類,一個(gè)Domain等
Rel:連接線

還需要額外強(qiáng)調(diào)下胜茧,普通的畫圖工具粘优,文件后綴需要保存為.uml,而c4的呻顽,需要保存為.puml雹顺。先保存為對應(yīng)的后綴,snippets才會在后續(xù)的編寫過程中生效芬位。

還有一些特殊的代碼用來指定圖的模式--注意后面要加上():

LAYOUT_WITH_LEGEND()

在include之后加上這行代碼无拗,會在生成圖形的右下角生成如下內(nèi)容:

file
LAYOUT_AS_SKETCH()

加上這個(gè)表示草稿,整個(gè)渲染生成的圖形都是草稿樣式昧碉,如下:

file
LAYOUT_TOP_DOWN

排列方向英染,顧名思義為從上到下排列,注意不需要加括號

LAYOUT_LEFT_RIGHT

排列方向被饿,顧名思義為從左到右排列四康,注意不需要加括號

開始寫對應(yīng)的code
@startuml
!include /Users/alankim/gitspace/C4-PlantUML/C4_Container.puml

'LAYOUT_WITH_LEGEND()
LAYOUT_AS_SKETCH()

Person(user, "用戶")

System_Boundary(item, "商品相關(guān)"){
    System(itemCenter, "商品中心", "")
    System(priceCenter, "價(jià)格中心", "")
    System(InventoryCenter,"銷售庫存","")
}

System_Ext(orderPlatform, "訂單平臺")
System_Ext(wmsStock,"wms庫存")
System_Ext(buy,"導(dǎo)購平臺")

Rel(wmsStock, InventoryCenter, "庫存上拋")
Rel(buy,itemCenter,"商品信息查詢")
Rel(user,orderPlatform,"提交訂單")
Rel(buy,priceCenter,"價(jià)格查詢")
Rel(orderPlatform,InventoryCenter,"扣減庫存")
Rel(InventoryCenter, itemCenter, "查詢商品sku")
Rel(priceCenter,itemCenter,"查詢商品sku")
Rel(user,buy,"用戶瀏覽")

@enduml

這個(gè)圖畫的比較復(fù)雜,基本上把大部分組件都用上了狭握,對應(yīng)生成的圖形如下:

file

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布闪金!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市论颅,隨后出現(xiàn)的幾起案子哎垦,更是在濱河造成了極大的恐慌,老刑警劉巖恃疯,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漏设,死亡現(xiàn)場離奇詭異,居然都是意外死亡今妄,警方通過查閱死者的電腦和手機(jī)郑口,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鸳碧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犬性,你說我怎么就攤上這事瞻离。” “怎么了乒裆?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵套利,是天一觀的道長。 經(jīng)常有香客問我缸兔,道長日裙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任惰蜜,我火速辦了婚禮昂拂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抛猖。我一直安慰自己格侯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布财著。 她就那樣靜靜地躺著联四,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撑教。 梳的紋絲不亂的頭發(fā)上朝墩,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音伟姐,去河邊找鬼收苏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愤兵,可吹牛的內(nèi)容都是我干的鹿霸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼秆乳,長吁一口氣:“原來是場噩夢啊……” “哼懦鼠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屹堰,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肛冶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扯键,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淑趾,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年忧陪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扣泊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘶摊,死狀恐怖延蟹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叶堆,我是刑警寧澤阱飘,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站虱颗,受9級特大地震影響沥匈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忘渔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一高帖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畦粮,春花似錦散址、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至儒将,卻和暖如春吏祸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钩蚊。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工贡翘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人两疚。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓床估,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诱渤。 傳聞我的和親對象是個(gè)殘疾皇子丐巫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容