近期在工作之余閱讀了一本架構(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í)行文件,負責(zé)其固定的功能,在每個單獨的容器會有一系列的組件來構(gòu)成該容器;組件是應(yīng)用程序中的功能模塊,每個組件負責(zé)各自單獨的功能,最后為了實現(xiàn)該組件的特定功能,會有一系列的類來實現(xiàn)這個組件。總體的結(jié)構(gòu)示意圖如下:

根據(jù)場景的不同,可以將C4模型中的四個部分對應(yīng)為:語境圖(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)原理。語境圖應(yīng)該是一種可以展示給非技術(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)周邊的容器圖。一個容器可以是一個:服務(wù)器端的web應(yīng)用、單頁面的應(yīng)用程序、桌面應(yīng)用程序、移動端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ù)支持人員
注意:該圖不需要介紹部署場景、集群、復(fù)制和故障轉(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模型工具自動生成,你應(yīng)該思考的是需要暴露類的那些屬性和接口來表示這個組件的功能。類圖不推薦制作,除非組件的功能邏輯相當復(fù)雜。
范圍:單個組件
主要元素:組件范圍內(nèi)的代碼元素,如:類、接口、對象、函數(shù)、基礎(chǔ)表格等等。
受眾:架構(gòu)師和開發(fā)者

總結(jié)
C4模型主要通過“抽象first”的方式來繪制架構(gòu)圖,通過基于上層的抽象反應(yīng)出軟件系統(tǒng)的結(jié)構(gòu),同時也體現(xiàn)了開發(fā)者對于軟件系統(tǒng)的思考,這種基于子集的抽象和分層的方式使C4模型非常容易學(xué)習(xí)和使用。
在軟件項目需要與擬出一份技術(shù)文稿的時候,可以先試試將軟件系統(tǒng)繪制成一個個架構(gòu)圖,來梳理其結(jié)構(gòu)。