畫出你的項目架構(gòu)圖

近期在工作之余閱讀了一本架構(gòu)方面的書籍千元,《軟件架構(gòu)》,由國際知名架構(gòu)師Simon Brown編寫颤绕,國內(nèi)鄧剛翻譯幸海。全書200多頁,分為了68個章節(jié)奥务,8個部分物独,每個章節(jié)一到兩頁,全書閱讀下來并不會花太多時間氯葬。相比較一些軟件架構(gòu)方面的大厚本挡篓,此書比較適合作為一部架構(gòu)方面的入門書籍,閱讀完此書帚称,可以對架構(gòu)師這個職業(yè)角色有個清晰的認識官研。

全書的第四部分,介紹了關(guān)于軟件可視化的一些方案闯睹,感覺非常實用戏羽。在日常的項目開發(fā)過程中,會面臨團隊合作楼吃,部門間合作等問題始花,不同個體之間的合作,自然避免不了要做技術(shù)上的溝通孩锡。在缺少文檔的時候酷宵,一副可以提現(xiàn)各個模塊之間聯(lián)系的架構(gòu)圖可以很好地提現(xiàn)項目整體邏輯,提高技術(shù)溝通的有效性躬窜。書中有介紹一種C4的模型浇垦,具有很強的表達性和制作簡潔等優(yōu)勢,本文將詳細介紹這個模型斩披。

C4模型將軟件系統(tǒng)分成:系統(tǒng)溜族、容器讹俊、組件和類。系統(tǒng)即軟件系統(tǒng)煌抒,一般需給出其具體的使用環(huán)境和需要解決的需求仍劈,在其之下會有一系列的容器;容器是一個個單獨的可執(zhí)行文件寡壮,負責其固定的功能贩疙,在每個單獨的容器會有一系列的組件來構(gòu)成該容器;組件是應用程序中的功能模塊况既,每個組件負責各自單獨的功能这溅,最后為了實現(xiàn)該組件的特定功能,會有一系列的類來實現(xiàn)這個組件棒仍”ィ總體的結(jié)構(gòu)示意圖如下:


結(jié)構(gòu)圖

根據(jù)場景的不同,可以將C4模型中的四個部分對應為:語境圖(Context)莫其、容器圖(Container)癞尚、組件圖(Component)和類圖(Code),這也是C4模型名字的由來乱陡。

語境圖

系統(tǒng)語境圖是繪制一個軟件系統(tǒng)的開始浇揩。在一個方框的中間畫出系統(tǒng),系統(tǒng)周圍畫出一些與之交互的使用者和其他功能系統(tǒng)憨颠。

在語境圖中胳徽,不必詳細的展示每個細節(jié),需要更加關(guān)注于人和軟件系統(tǒng)的關(guān)系爽彤,而不是技術(shù)細節(jié)和實現(xiàn)原理养盗。語境圖應該是一種可以展示給非技術(shù)人員看的圖。

范圍:一整個軟件系統(tǒng)

關(guān)鍵元素:范圍內(nèi)的軟件系統(tǒng)
輔助元素:范圍內(nèi)的人和軟件系統(tǒng)之間的聯(lián)系

受眾:每個人淫茵,包括技術(shù)和非技術(shù)人員爪瓜,軟件開發(fā)團隊內(nèi)的人和團隊外的人


語境圖

容器圖

一旦你理解軟件系統(tǒng)適用的IT環(huán)境要出,真正有益的下一步是關(guān)注于系統(tǒng)周邊的容器圖朗兵。一個容器可以是一個:服務器端的web應用澈缺、單頁面的應用程序忱辅、桌面應用程序挣惰、移動端APP瞒大、數(shù)據(jù)庫方案缤至、文件系統(tǒng)等等短曾“郏基本特征是谅猾,容器是一個獨立的可運行程序或者可部署單元。

容器圖展示的軟件的高層次組織結(jié)構(gòu),同時也展示了主要技術(shù)的選擇和容器之間的交互税娜。這是一種簡單的高層技術(shù)選型的圖坐搔,但對軟件開發(fā)人員很有用。

范圍:單獨的軟件系統(tǒng)

主要元素:軟件系統(tǒng)內(nèi)的各個容器
輔助元素:和容器相關(guān)的人和軟件系統(tǒng)之間的聯(lián)系

受眾:軟件系統(tǒng)開發(fā)團隊相關(guān)的技術(shù)人員敬矩,包括了:架構(gòu)師概行、開發(fā)者和技術(shù)支持人員

注意:該圖不需要介紹部署場景、集群弧岳、復制和故障轉(zhuǎn)移等等


容器圖

組件圖

組件圖展示的是一個容器內(nèi)部是如何組織各個組件的凳忙,一個組件即容器內(nèi)部的一個功能和技術(shù)實現(xiàn)細節(jié)。

范圍:單個容器

主要元素:容器范圍內(nèi)的各個組件
輔助元素:容器禽炬、和組件相關(guān)的人和軟件系統(tǒng)的聯(lián)系

受眾:架構(gòu)師和開發(fā)者


組件圖

類圖

類圖是單個組件的實現(xiàn)代碼組織涧卵,可以用類似UML圖、整體關(guān)系圖來表示腹尖。

這是一種可選的圖柳恐,通常情況下可以用IDE和UML模型工具自動生成,你應該思考的是需要暴露類的那些屬性和接口來表示這個組件的功能桐臊。類圖不推薦制作胎撤,除非組件的功能邏輯相當復雜晓殊。

范圍:單個組件

主要元素:組件范圍內(nèi)的代碼元素断凶,如:類、接口巫俺、對象认烁、函數(shù)、基礎表格等等介汹。

受眾:架構(gòu)師和開發(fā)者


類圖

總結(jié)

C4模型主要通過“抽象first”的方式來繪制架構(gòu)圖却嗡,通過基于上層的抽象反應出軟件系統(tǒng)的結(jié)構(gòu),同時也體現(xiàn)了開發(fā)者對于軟件系統(tǒng)的思考嘹承,這種基于子集的抽象和分層的方式使C4模型非常容易學習和使用窗价。

在軟件項目需要與擬出一份技術(shù)文稿的時候,可以先試試將軟件系統(tǒng)繪制成一個個架構(gòu)圖叹卷,來梳理其結(jié)構(gòu)撼港。

參考資料

C4模型官網(wǎng)

程序員必讀之軟件架構(gòu)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骤竹,隨后出現(xiàn)的幾起案子帝牡,更是在濱河造成了極大的恐慌,老刑警劉巖蒙揣,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靶溜,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機罩息,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門嗤详,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓷炮,你說我怎么就攤上這事断楷。” “怎么了崭别?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵冬筒,是天一觀的道長。 經(jīng)常有香客問我茅主,道長舞痰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任诀姚,我火速辦了婚禮响牛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赫段。我一直安慰自己呀打,他們只是感情好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布糯笙。 她就那樣靜靜地躺著贬丛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪给涕。 梳的紋絲不亂的頭發(fā)上豺憔,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音够庙,去河邊找鬼恭应。 笑死,一個胖子當著我的面吹牛耘眨,可吹牛的內(nèi)容都是我干的昼榛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剔难,長吁一口氣:“原來是場噩夢啊……” “哼胆屿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钥飞,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤莺掠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后读宙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彻秆,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唇兑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酒朵。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扎附,靈堂內(nèi)的尸體忽然破棺而出蔫耽,到底是詐尸還是另有隱情,我是刑警寧澤留夜,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布匙铡,位于F島的核電站,受9級特大地震影響碍粥,放射性物質(zhì)發(fā)生泄漏鳖眼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一嚼摩、第九天 我趴在偏房一處隱蔽的房頂上張望钦讳。 院中可真熱鬧,春花似錦枕面、人聲如沸愿卒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琼开。三九已至,卻和暖如春唇跨,著一層夾襖步出監(jiān)牢的瞬間稠通,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工买猖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滋尉。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓玉控,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狮惜。 傳聞我的和親對象是個殘疾皇子高诺,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,090評論 25 707
  • 窺探者 文/左藝 一 春天 是你撩撥出來的 正如你撩撥了一朵 端坐蓮蓬的仙女 風 撩撥了健壯的山 雨在荊棘里掙扎 ...
    小骨木蘭花閱讀 645評論 1 8
  • 綜覽 安全散列算法secure hash algorithm ,是一個密碼散列函數(shù)家族 是fips認證的五種安全散...
    一曲廣陵散閱讀 1,467評論 0 1
  • 成長,對努力想要抓住青春尾巴的女性來說开泽,是一個充滿矛盾的詞牡拇,一方面,我們渴望成長,另一方面惠呼,也惶恐時間飛逝导俘。...
    小妞育兒閱讀 404評論 3 7