概述
剛在InfoQ上看到一篇介紹C4Model的文章,覺得這個模型設計的很贊,很有指導意義,做個簡單的記錄.
Why,為什么需要架構圖?
ThoughtWorks中國
文章中有幾句話我覺得很有道理,這里直接摘抄.
“紙上的不是架構,每個人腦子里的才是” ; “那些精妙的方案之所以落不了地,是因為沒有在設計上兼容人類的愚蠢”。
我覺得,軟件工程,或者軟件中的術語發明的原因就是為了減少溝通的障礙,讓大家在一個 平台 上對話.
而架構圖可以起到如下作用;
- 一方面: 讓軟件的開發人員自己,以及和軟件開發相關的用戶,PM等人員都能快速了解一個系統的業務模型;
- 另一方面: 利於開發人員相互之間協作,定下方案,因為自然語言是有模糊地帶的,難以無歧義的傳達;
- 利於軟件系統的維護,一圖勝千言.
What,C4 是什么呢?
詳細的講解,可以參考InfoQ的文章,這里做個總結.
C4 4個單詞的首字母為C的單詞的代表, 分別為: 上下文(Context),容器(Container),組件(Component)和代碼(Code);
依據不同的受眾,分別抽象出了這四個級別.其中容器(應用程序、數據存儲、微服務等,組件和代碼來描述一個軟件系統的靜態結構.
第 1 層:系統上下文
顯示了正在構建的軟件系統,以及構建的系統與用戶及其他軟件系統之間的關系。
這個層級的圖,關注的是用戶層面看到的關系,注重的是和准備開發的系統與外部系統和交互人之間的關系.
將用戶,你的代建系統,已有的其他系統用不同的顏色進行區分;
第 2 層:容器
將軟件系統放大,顯示組成該軟件系統的容器(應用程序、數據存儲、微服務等)。
在這個層級,已經關注系統本身了,開始關注這個系統有哪些部分組成,不過粒度非常粗.
第 3 層:組件
將單個容器放大,以顯示其中的組件。這些組件映射到代碼庫中的真實抽象(例如一組代碼)。
在這個層級,關注的已經是系統中的模塊具體的功能了,這部分可能對應了具體的功能模塊.
第 4 層:代碼
如若必要,可以放大個別組件,以顯示該組件的實現方式。 一般以UML圖的形式展示;
這個層級,是具體的開發人員關注的實現細節了,用於具體的功能邏輯的分析和展示.
How,怎能畫圖呢?
在C4官網,下有個Tooling節點,講述了目前已有的幾個畫圖工具.