軟件架構C4模型介紹 「C4 模型」:html
表明上下文(Context)、容器(Container)、組件(Component)和代碼(Code)——一系列分層的圖表,能夠用這些圖表來描述不一樣縮放級別的軟件架構,每種圖表都適用於不一樣的受衆。數據庫
爲代碼建立地圖,首先須要一組通用的抽象來建立一種無處不在的語言,用來描述軟件系統的靜態結構。C4 模型使用容器(應用程序、數據存儲、微服務等)、組件和代碼來描述一個軟件系統的靜態結構。它還考慮到使用軟件系統的人。服務器
第1 層是系統上下文圖,它顯示了正在構建的軟件系統,以及系統與用戶及其餘軟件系統之間的關係。微信
第2層是一個容器圖,將軟件系統放大,顯示組成該軟件系統的容器(應用程序、數據存儲、微服務等)。技術決策也是該圖的關鍵部分。如下是互聯網銀行系統的容器圖示例。它顯示了互聯網銀行系統(虛線框)由五個容器組成:服務器端Web 應用程序、客戶端單頁面應用程序、移動應用程序、服務器端API 應用程序和數據庫。網絡
第 3 層是組件圖,將單個容器放大,以顯示其中的組件。這些組件映射到代碼庫中的真實抽象(例如一組代碼)。下面是一個虛擬的網上銀行系統的組件圖示例,顯示了 API 應用程序中的一些組件(而不是所有)。架構
兩個Spring MVC REST 控制器爲JSON/HTTPS API 提供訪問點運維
第4 層代碼
最後,能夠放大個別組件,以顯示該組件的實現方式。如下是一個虛擬的網上銀行系統的UML 類圖示例微服務
C4 模型沒有預約義任何特定的符號,在這些示例圖中看到的是一個個簡單的符號,適用於白板、紙張、便籤、索引卡片和各類圖表工具。也可使用 UML 做爲符號,並適當使用包、組件和原型。工具
C4 模型是一種在不一樣抽象層次上交流軟件架構的簡單方法,能夠向不一樣的受衆講述不一樣的故事。這也是向軟件開發團隊介紹(一般是從新引入)嚴謹和輕量級建模的一種方式。性能
在JAVA中,有一個工具幫助咱們用代碼驅動測試架構ArchUnit in Java。
相關也有一本書推薦Coding an Architecture Style.
若有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注個人微信訂閱號:
做者:Petter Liu
出處:http://www.cnblogs.com/wintersun/ 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。 該文章也同時發佈在個人獨立博客中-Petter Liu Blog。