# 為什麼要使用 C4 Model ## 1:解決傳統架構圖的模糊與混亂 1. 它可以改善不一致的標記法 它解決了軟體開發人員在溝通架構時,容易出現的「由盒子和線條組成的混亂堆疊」,包含標記法不一致、命名模糊、關係未標記以及混合抽象層級等問題。 2. 它提供結構化的表示方式 C4 Model 是一種「輕量級圖形表示技術」,基於對系統進行容器和組件的結構化分解,為團隊提供一種結構化且具自我描述性的方式來使用「盒子和線條」。 3. 降低學習門檻並取代複雜工具 相較於過於複雜且難以傳承的 UML、ArchiMate 或 SysML,C4 Model 更加「簡單、清晰且易於理解」,不需要專門的知識或培訓即可上手。 ## 2:促進技術與非技術人員間的有效溝通 1. 建立共同語言 藉由提供描述系統架構的「共同語言」(就是 C4 Model),增強團隊成員之間的溝通,減少可能導致昂貴錯誤與專案延遲的誤解。 2. 跨越利害關係人的溝通鴻溝 專門設計用來「跨越技術和非技術利害關係人之間的溝通鴻溝」,讓不懂程式的門外漢也能看懂高階架構。 3. 針對不同受眾講述不同的故事:透過層級化的圖表,向「不同類型的受眾講述不同的故事」,從高階的業務環境到詳細的技術實作均有所對應。 ## 3:提供「地圖式」的多層次導航視野 1. 實現程式碼的地圖化 (Maps of your code) 就像使用 Google Maps 一樣,C4 Model 讓團隊能夠在感興趣的區域「放大和縮小」,在不同的縮放級別描述軟體架構。 2. 靈活的抽象層級定義: - Level 1 (System Context):展示系統如何與周圍的世界互動。 - Level 2 (Container):放大系統邊界,顯示系統內部的應用程式和資料存儲。 - Level 3 (Component):進一步分解容器,顯示內部的邏輯職責與邊界。 - Level 4 (Code):展示元件是如何在程式碼層級實作的。 3. 專注於必要的細節:允許團隊根據需求「選擇性地」應用不同層級,大多數團隊發現 Level 1 和 Level 2 就能提供最大的價值,避免陷入不必要的細節。 ## 4:支援軟體全生命週期的維運與演進 1. 提升軟體設計品質 透過將架構分解為四個層級,有助於在開發過程的「早期識別潛在的設計問題」,確保系統的穩健性。 2. 簡化文檔編寫任務 為複雜系統的文檔提供一個「清晰且簡潔的框架」,確保覆蓋架構的所有方面,成為團隊的重要資源。 3. 支援高效的系統維護與演進 分層表示法能清晰展現組件間的互動,當開發人員引入新功能時,能輕易「識別潛在的影響或依賴關係」。 4. 加速新成員入職: 新團隊成員可以透過這些層級化的視覺化圖表,由淺入深地「快速理解系統架構」及其在其中的角色。 5. 輔助特定工程任務:在「QA 與測試」、「微服務架構審查」、「遷移或重構專案」以及「安全稽核」中,提供必要的架構透明度。 ## 5:與敏捷開發流程高度相容 1. 支援演進式架構:在敏捷團隊不希望有制式化文件與前期設計的環境下,C4 Model 提供了一種「視覺化架構的方式」,因此在敏捷社群非常受歡迎。 2. 靈活且不具強制性:不規定特定的佈局、形狀或顏色,鼓勵「互動式的協作繪圖」,並可與各種繪圖工具或「圖表即程式碼 (Diagrams as code)」工具結合使用。