上星期五晚出席了一個關於軟件架構視覺化的講座。講者Simon Brown 多年從事系統架構的顧問和培訓工作,也會到世界各地演講,著作有 和 。其題為”The Conflict Between Agile and Architecture — Myth or Reality?” 的演講在Software Engineering Institute 主辦的SATURN Conference 2013中,獲參予者票選為”Architecture in Practice” Presentation Award 得主。
於是很多開發者以自己的方式畫了令人不明所以的系統架構圖。有些圖使用了意味不明的顏色和圖形(這個粉紅色的虛線想表示什麼?),有些則過多實作細節(User → UI → Calculation Engine → Data Reader → ……),有些將架構(Architecture)、運行(Execution)、部署(Deployment)等不同面向的內容混在同一幅圖裡(Import Service, cron, UNIX VM instance, …… )。結果這些「設計圖」徒令本來要說明的構想更難理解。
C4 Model — 地圖的類比
針對上述情況,Simon 認為”A common set of abstractions is more important than a common notation.”,提倡C4 Model (Context, Container, Component, Class),將系統架構分成四個層級的抽象化。一個系統會有一個Context 以及各種使用者和其他外部系統,Context 由多個Container構成(例如web app, mobile client, database, etc.),每個Container 包括數個Component ,而Component 由class 組成。
Simon 以地圖的縮放比例來類比架構圖的層級。地圖愈是放大,看到的地域愈小,但顯示的資訊愈詳細。同樣道理,低層的架構圖應顯示特定模組的細節,而高層的架構圖應隱藏細節,提供較宏觀的概覽。