C4模型
外觀
C4模型是軟件系統建模的圖形表示技巧[1][2]。C4模型會用到一些現有的建模技巧,例如統一建模語言(UML)及ER模型(ERD),會將系統結構化分解,分解為容器(container)和組件(component)。
歷史
[編輯]C4模型是由軟件架構師Simon Brown在2006年至2011年之間創建,以統一建模語言和4+1視景模型的基礎上建立。在2018年在官網上以共享創意許可協議[3]發佈,並且也提出相關的文章[4][1]。
簡介
[編輯]C4模型用以下的幾個視角來敘述軟件系統的架構[5],會說明系統分解為容器和組件的方式、各元素之間的關係,若是適用的話,也可以說明和使用者之間的關係[3]。
- 系統上下文圖(Context diagrams),第一層的圖,說明系統、和其使用者以及其他系統的關係。
- 容器圖(Container diagrams),第二層的圖,將系統分解為彼此相關的容器(container)。容器可以是應用程序或是資料存儲。
- 組件圖(Component diagrams),第三層的圖,將容器分別為彼此相關的組件,也說明組件和其他組件(或是其他系統)的關係。
- 程式碼圖(Code diagrams),第四層的圖,提供架構元素的設計細節,可以對應到程式碼。在此層級的C4模型會用到目前已有的標示方式,例如統一建模語言、ER模型或是集成開發環境產生的示意圖。
C4模型的第一層到第三層,用到五種基礎的圖示元素:人、軟件系統、容器、組件和關係。此技術沒有規定元素的佈局、形狀、顏色或是風格。C4模型建議以嵌套框為基礎的簡單圖表,方便互動式的協作繪圖。C4模型也鼓勵良好的建模實務,例如在每一個圖都加上標題以及圖例,以及清楚的標示,以方便目標讀者的理解。
在敏捷開發社群中,不太希望有制式化的文件方式,以及前期的架構設計,C4模型可以將架構可視化,因此在敏捷社群很受歡迎[6]。
相關條目
[編輯]參考資料
[編輯]- ^ 1.0 1.1 Richards,Mark; Ford, Neal. Fundamentals of software architecture: an engineering approach. O'REILLY MEDIA. 2019: 293. ISBN 978-1-4920-4342-3. OCLC 1138515057.
some standard are emerging for diagramming software architecture (such as software architect simon Brown's C4 model or The Open Group Archimate standard)
- ^ 2.0 2.1 Enríquez, René. Software Architecture with Spring 5. 0 : Design and Architect Highly Scalable, Robust, and High-Performance Java Applications.. Salazar, Alberto. Packt Publishing Ltd. 2018: 41–44. ISBN 978-1-78899-673-0. OCLC 1053798657.
- ^ 3.0 3.1 3.2 Brown, Simon. The C4 model for visualising software architecture. c4model.com (Official site of the modelling technique). [2020-08-22]. (原始內容存檔於2010-02-25).
- ^ Brown, Simon. The C4 Model for Software Architecture. InfoQ. 2018-06-25 [2020-08-22]. (原始內容存檔於2018-12-12) (英語).
- ^ Keeling, Michael. Design it! : from programmer to software architect. Raleigh, North Carolina. ISBN 978-1-68050-345-6. OCLC 1024312521.
- ^ The Conflict Between Agile and Architecture: Myth or Reality?. resources.sei.cmu.edu. SATURN 2013 conference. Software Engineering Institute of Carnegie Mellon University. [2020-08-22]. (原始內容存檔於2021-04-19) (英語).