人人都是架構師:透過C4模型快速構建軟體架構

作者:鄧冰寒

在面試軟體工程師的時候,通常會問候選人的職業規劃,大部分人希望在未來3-5年成為一名架構師。在大多數人開發人員的眼裡,架構師是一種令人嚮往的職位,不過我認為架構師不僅僅是一種職位,更應該是一種角色,這樣人人都是架構師。

首先,人人都是架構師,並不是說人人都要做架構師這個職位。如果開發人員具備以下八個核心能力:程式設計能力、除錯能力、編譯部署能力、效能最佳化能力、業務架構能力、線上運維能力、專案管理能力和產品規劃能力,就能向上提升成為一名優秀架構師;但那些在象牙塔下繪製大量UML圖,以及寫了幾百頁無人問津的Word文件的“偽架構師”,他們不參與程式碼的編寫,被業界戲稱為“AaaS(Archtecture as a Service)”——架構即服務。

一直以來,架構設計仍然被很多開發人員所誤解,認為架構設計是架構師的工作,自己只是一位寫程式碼的工程師,接過產品經理遞過來的原型圖就直接擼碼單幹了。對於業務簡單的專案來說,是可以這麼做。但隨著業務的增長,程式碼就會堆積成一個“大泥球”。

其次,人人都是架構師,說的是人人都可以擔當架構師這個角色。正如在二十年前,汽車司機是一種令人羨慕的職業,隨著時代的進步,汽車已經當做普通人的代步工具。是的,當今依然有開大貨車、大巴車的專業司機,但是不妨礙我們人人都可以作為司機的角色,自己開車著小汽車代步。作為新時代的開發人員,是否有一種架構設計的“代步工具”?這樣的話,人人都能是架構師。C4模型,就能助力開發者快速構建軟體架構。

C4模型

C4模型的理念是將系統分為:

System Context(系統上下文)、Container(容器)、Component(元件)、Code(程式碼)

,每層代表不同的檢視架構,每層適用與不同的人員,針對當前的人員角色,找到共同的關注點來形成統一認知。

人人都是架構師:透過C4模型快速構建軟體架構

從上圖可知,在使用C4模型來描述元件的軟體架構時,可以透過放大進入下一層,把架構從宏觀到細節展示出來。正如從地圖上地址一樣,先總覽國家(對應C4的系統上下文),然後到省(對應C4的容器),再到市(對應C4的元件),最後到街(對應C4的程式碼)。這四種不同的抽象層次讓不同的角色都能找到適合自己的內容,並在此基礎上進行討論形成共同認知,即DDD所稱的通用語言。

人人都是架構師:透過C4模型快速構建軟體架構

第一層:系統上下文(System Context)

在這一層的使用者角色主要是業務人員,產品經理,架構師,開發人員,特別是業務人員,他們不關注技術細節,但是對業務領域非常熟悉,也就是DDD所稱的領域專家。

一般情況下,會由產品經理或架構師來繪製系統上下文。如果產品經理和業務人員在不瞭解技術細節的情況下,都能看懂系統上下文,對於要實現這個業務邏輯的開發人員來說,更不在話下。所以開發人員應該以架構師的角色來了解業務邏輯,並繪製出C4架構圖中的系統上下文。只有這樣,開發人員才能拔高層次,轉變傳統思維,站在更高的層次來設計軟體系統。透過C4模型來設計軟體架構,能降低溝通成本,讓開發人員在設計之初就和業務人員達成統一的認知,不至於偏離方向。

人人都是架構師:透過C4模型快速構建軟體架構

第二層:容器(Container)

這一層是從系統上下文放大進入的效果,我們以出行應用中的高鐵票務系統為例,在這裡各個服務及儲存的職責和依賴關係。這層是給有技術背景的角色看的,描述的應用是程序級別的應用,可以直接部署與執行,透過這層可以瞭解清楚軟體的職責描述。

人人都是架構師:透過C4模型快速構建軟體架構

第三層:元件(Component)

這一層是容器層的放大,看到的是一個服務內部的元件,例如我們的出行應用訂單服務元件架構,可以清楚的看到服務內部元件之間的關係。同時,還可以透過程式碼片段來輔助開發人員的理解。

人人都是架構師:透過C4模型快速構建軟體架構

第四層:程式碼(Code)

程式碼層是元件層的放大,通常是使用UML圖來描述元件的細節。在上面提到,實際上繪製UML圖的投入產出比比較低,現在大部分開發人員都不會繪製UML圖,也就不重點講解。

C4模型優勢

使用一致的標準直觀地描述軟體系統

使用一致的標準降低了溝通成本,意味著你將在會議上花更少的時間,實現降本增效

加強圖示的建立和維護

用物件建立圖示,以便從任何地方同步更改,從而無需在多個地方查詢相同的物件

透過放大、縮小來呈現不同層次的細節

透過簡單地放大更多細節和縮小上下文,為每位使用者或觀眾呈現正確的細節,而不是重複維護多個文件

人人都是架構師,需要開發人員轉變思維,以架構師的角色來設計產品架構。當然,要實現人人都是架構師,並不是一件容易的事。但透過C4模型來設計架構,可以大大降低架構設計的門檻。

透過C4模型架構圖設計理念,即使是個普通的開發人員,也可以很容易的去設計軟體架構。可以預見,在不久的將來,就如現在的汽車司機一樣,有專業的架構師,但是不妨礙開發人員都成為架構師的角色,更加貼近業務,設計出符合企業核心業務的架構。

附:C4 模型是一種在不同抽象層次上交流軟體架構的簡單方法,可以向不同的受眾講述不同的故事。這也是向軟體開發團隊介紹(通常是重新引入)嚴謹和輕量級建模的一種方式。有關 C4 模型的更多資訊,以及補充圖(執行時和部署)的示例、符號清單、常見問題解答、會議講座影片和工具選項,請參閱

c4model.com