「你無法在未理解房屋所處位置的情況下建造房屋。」
— 改編自西蒙·布朗,C4模型創作者
🌍 導言:為什麼大局至關重要
在軟體架構中,清晰度始於頂層。這C4系統上下文圖——C4模型的第1層C4模型由西蒙·布朗——是回答一個關鍵問題的基礎性成果:
「這個系統在世界中處於什麼位置?」
這個圖表不僅僅是視覺輔助工具。它是第一步在團隊、利益相關者和企業領導者之間建立共識的基礎。無論你正在啟動一個全新項目,還是記錄一個遺留系統,系統上下文圖都能提供衛星視角——一個高階的圖譜,展示你的軟體系統如何與使用者及其他系統互動。
本指南將帶你了解所有你需要知道的內容:它是什麼、為什麼重要、何時使用、如何創建,以及如何避免常見陷阱。本指南專為架構師、開發人員、產品經理、業務分析師,甚至希望使用相同架構語言的高階主管而設計。
🔷 什麼是C4系統上下文圖?
這C4系統上下文圖(第1層)是C4模型中的最高層次的視圖。它顯示:
-
一個軟體系統(你正在開發或記錄的那個系統)
-
周圍環境:
-
人員(使用者/參與者/角色),
-
外部軟體系統直接互動的系統。
-
✅ 目標:理解系統的範圍, 邊界,以及生態系統中的定位你的系統——無需深入實作細節。
📌 關鍵特徵

| 功能 | 描述 |
|---|---|
| 層級 | C4 第一層 – 系統脈絡 |
| 重點 | 僅限高階互動 |
| 無細節 | 無容器、組件、程式碼、通訊協定或部署細節 |
| 易讀性 | 針對非技術相關利益關係人設計 |
| 範圍 | 一次僅針對一個系統——邊界清晰 |
| 大小 | 理想上可完整呈現於一頁 |
🧩 核心元素(C4 標準)
| 元素 | 符號 | 目的 | 最佳實務 |
|---|---|---|---|
| 軟體系統(在範圍內) | 方框(置中、粗體、上色) | 您正在記錄的系統 | 提供明確的名稱 + 簡短的目的 |
| 人員(使用者/角色) | 人形圖示或人物圖示 | 與系統互動的角色 | 使用角色名稱,而非個人姓名(例如:「顧客」、「管理員」) |
| 外部軟體系統 | 方框(不同樣式/顏色) | 您的系統所對接的其他系統 | 包含 SaaS、舊有系統、API、合作夥伴系統 |
| 關係 | 箭頭 + 標籤 | 互動的方向與意圖 | 使用主動語態動詞:「提交付款」、「透過…驗證」 |
⚠️ 經驗法則:如果它未直接參與於直接互動,就不應該出現在這裡。
🎯 為何要建立系統上下文圖?
以下是這張簡單圖表具有深遠影響的原因:
| 效益 | 說明 |
|---|---|
| ✅ 立即協調利害關係人 | 產品負責人、開發人員、測試人員和業務領導者都能看到相同的圖景。 |
| ✅ 與非技術對象溝通 | 高階主管、審計人員和新進員工都能理解範圍與依賴關係。 |
| ✅ 防止範圍蔓延 | 明確定義什麼是在與不在範圍內。 |
| ✅ 更深入層級的基礎 | 每個容器、組件和部署圖都追溯至此圖。 |
| ✅ 早期識別風險 | 揭露關鍵的外部依賴(例如,穩定性差的第三方 API)。 |
| ✅ 加速新成員融入 | 新成員只需幾分鐘就能理解「我們的位置」。 |
💬 西蒙·布朗的建議:
「系統上下文圖是你架構文件中最重要的圖。」
📅 何時應建立或更新此圖?
✅ 在以下情況建立:
-
啟動新專案(綠地專案)。
-
記錄現有系統(棕地專案)。
-
規劃重大架構轉變(雲端遷移、微服務)。
-
進行架構審查或治理會議。
-
為新團隊或利益相關者群組進行入職。
🔁 何時更新:
-
出現新的使用者角色(例如:「合作夥伴管理員」)。
-
您的系統開始與新的外部系統整合(例如:「付款處理器」)。
-
系統被重新命名、停用或重新定義範圍。
-
商業方向或產品策略發生變動。
-
每季或每年一次的架構更新週期。
🔄 最佳實務: 將其視為一個 活文件—像程式碼一樣進行版本控制,儲存在 Git 中,並定期更新。
🛠️ 如何建立出色的系統上下文圖:逐步指南
遵循以下 7 個步驟 以建立強大、有意義且利害關係人友好的圖表。
步驟 1:定義範圍內的系統
從 一句清楚的句子 來定義您的系統:
「這是 網上銀行系統 — 它讓客戶能透過網路檢視餘額、轉帳及付帳單。」
✅ 使用 主動語態
✅ 保持簡潔 簡潔
✅ 聚焦於 核心責任
💡 小提示:此句子將成為您的系統描述在您的圖表中。
步驟 2:識別使用者(人員)
提問:
「誰從此系統中獲益?」
腦力激盪角色,而非個人。常見範例:
-
客戶 – 使用系統來管理帳戶
-
管理員 – 管理使用者並監控交易
-
支援人員 – 排除問題
-
合作夥伴 – 與您的 API 整合
-
訪客 – 無名使用者瀏覽
✅ 使用角色,而非姓名(例如「客戶」而非「約翰·史密斯」)
✅ 限制在 3–6 個關鍵角色
步驟 3:識別外部系統
提問:
「此系統直接與哪些其他生產系統互動?」
思考僅限直接整合 — 非傳遞性或間接的整合。
範例:
-
核心銀行系統 (舊式大型主機)
-
支付網關 (Stripe、PayPal)
-
客戶關係管理系統 (Salesforce)
-
電子郵件服務 (SendGrid、AWS SES)
-
身份提供者 (Auth0、Okta、Azure AD)
✅ 僅包含你的系統直接呼叫或接收資料來源的系統直接呼叫或接收資料的系統
✅ 避免使用「我們使用API」——請明確命名實際系統
步驟 4:繪製高階關係
繪製箭頭從使用者/系統指向軟體系統(或反之),並以 意圖.
使用主動語態的動詞短語:
-
✅ 「提交付款」
-
✅ 「檢視帳戶餘額」
-
✅ 「透過 Auth0 認證」
-
✅ 「接收訂單通知」
-
✅ 「發送確認郵件」
❌ 避免:
「使用 HTTPS」
「呼叫 REST API」
「透過 Kafka 發送資料」
步驟 5:保持簡單且易讀
黃金法則:
-
總共最多 10–12 個方框(包含你的系統)
-
僅限一頁—— 無需捲動
-
使用一致的圖示/顏色:
-
人員:簡筆人像或人物圖示
-
你的系統:中央方框,粗體,上色
-
外部系統:不同顏色或邊框樣式(例如虛線)
-
📝 加上一個圖例用以解釋符號(例如「藍色 = 外部系統」,「綠色 = 人員」)
📌 小提示:如果方框超過 12 個,建議改為使用系統概覽圖(第 0 層)
步驟 6:與利害關係人確認
展示給:
-
產品負責人
-
業務分析師
-
資深開發人員
-
UX設計師
-
資訊安全或合規官員
詢問:
「這是否準確反映了系統的運作方式?」
「我們是否遺漏了任何關鍵使用者或整合?」
🔄 迴圈迭代,直到達成共識為止。
步驟 7:選擇您的工具(2026 年格局)
| 工具 | 最適合 | 優點 | 缺點 |
|---|---|---|---|
| PlantUML + C4-PlantUML | 基於程式碼,適合 Git | 免費、自動化、版本控制 | 學習曲線 |
| Structurizr | 企業級,協作式 | 基於網頁,支援所有 C4 層級 | 免費版功能受限 |
| IcePanel | 視覺化、互動式 | 即時協作,AI 輔助 | 訂閱制 |
| Visual Paradigm AI C4 Studio | AI 驅動的設計 | 自動從文字生成圖表 | 付費 |
| Draw.io / diagrams.net | 快速草圖 | 免費,可與 Confluence、GitHub 整合 | 手動佈局 |
| Miro / Lucidchart / Excalidraw | 工作坊與腦力激盪 | 非常適合白板繪製 | 預設情況下未進行版本控制 |
🛠️ 建議: 使用 使用 C4 擴展的 PlantUML 以確保長期可維護性。
🖼️ 快速 PlantUML 範例:網上銀行系統
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUml/master/C4_Context.puml
title 網上銀行系統 - 系統上下文(第 1 層)
Person(客戶, "個人客戶", "使用網上銀行管理帳戶並進行付款")
Person(管理員, "銀行員工 / 管理員", "管理使用者並監控交易")
System_Boundary(c4, "網上銀行系統") {
System(ib, "網上銀行", "讓客戶查看帳戶、轉帳及支付帳單")
}
System_Ext(核心, "核心銀行系統", "傳統主機系統 – 帳戶與交易的真實來源")
System_Ext(郵件, "郵件服務", "發送確認與安全郵件(例如 AWS SES)")
Rel(客戶, ib, "查看餘額、進行轉帳、支付帳單")
Rel(管理員, ib, "管理帳戶、查看報表")
Rel(ib, 核心, "讀取帳戶資料、提交交易")
Rel(ib, 郵件, "發送通知")
legend right
C4 上下文圖 – 第 1 層n
• 範圍內僅有一個軟體系統n
• 使用者(人物)與外部系統n
• 無實作細節n
• 僅顯示高階意圖
end legend
@enduml
✅ 輸出: 一個乾淨、專業且可版本控制的圖表,可從程式碼自動渲染。
🏆 最佳實務:這樣做,不要那樣做
| ✅ 應該這樣做 | ❌ 不要這樣做 |
|---|---|
| 使用 主動語態標籤:「提交付款」、「透過…驗證」 | 使用被動語態:「付款已提交」 |
| 將系統置中 | 放置於偏離中心或角落 |
| 保持語言 簡單且非技術性 | 使用術語如「API」、「微服務」、「Kafka」 |
| 僅包含 直接互動 | 添加您的系統間接依賴的系統 |
| 使用 一致的圖示/顏色 | 隨機混合風格 |
| 為圖表版本化(例如 v1.0) | 將其視為靜態圖表,或在創建後丟棄 |
| 儲存在 程式碼 (例如 PlantUML 檔案) | 僅以 PNG/PDF 格式儲存,不保留原始檔 |
🚩 應避免的常見錯誤
-
添加太多方框 → 總數超過 12 個?您可能需要一個 系統概覽圖 (第 0 級)。
-
包含技術細節 → 不要包含「REST」、「HTTPS」、「Kafka」、「Docker」。
-
顯示內部組件 → 這屬於第 2 級(容器圖)。
-
使用真實姓名而非角色 → 「John Smith」→ 「客戶」。
-
忽略外部系統 → 遺漏關鍵依賴,例如支付網關或舊系統。
-
未與利害關係人確認 → 存在誤解與重做的風險。
📌 最終想法:從這裡開始,逐步提升
這個 系統上下文圖 不僅是第一步——它更是 最重要.
它是基礎所有其他架構決策都建立在其上。一個精心設計的第1級圖示:
-
防止誤解
-
減少重複工作
-
加快入職流程
-
促進更好的決策制定
🏁 專業提示:在創建任何更深入的圖示(容器、組件、程式碼)之前,總是從系統上下文圖開始.
📚 更多閱讀與資源
-
📘 C4模型官方網站: https://c4model.com
-
📄 C4模型文件: https://github.com/c4model/c4-model
-
🧩 C4-PlantUML程式庫: https://github.com/plantuml-stdlib/C4-PlantUML
-
🧠 Visual Paradigm C4指南: https://www.visual-paradigm.com/guides/c4-model/
-
🎥 Simon Brown 的 YouTube 演講:在 YouTube 上搜尋「C4模型」
✅ 摘要:您的C4系統上下文檢查清單
| 任務 | 完成? |
|---|---|
| 用一句清晰的話定義系統 | ☐ |
| 識別3至6個關鍵使用者角色 | ☐ |
| 識別3至6個關鍵外部系統 | ☐ |
| 僅繪製直接且高階的互動 | ☐ |
| 使用主動語態標籤(例如:「提交付款」) | ☐ |
| 確保圖表在一頁內可讀 | ☐ |
| 使用一致的圖示/顏色 | ☐ |
| 添加圖例 | ☐ |
| 與利害關係人確認 | ☐ |
| 以程式碼形式儲存(例如:PlantUML) | ☐ |
🌟 記住:
優秀的架構始於清晰。
清晰始於系統上下文圖。
👉 在您下一個專案中從此圖開始。
您將節省時間,避免混淆,並在團隊與利害關係人之間建立信任。
📣 「最好的建築設計,是每個人都能理解的那一個。」
— 靈感來自西蒙·布朗
將此指南下載為 PDF → [下載版本連結]
在您下一個專案中使用此範本 → [包含 PlantUML 範例的 GitHub 倉庫連結]
📌 標語:
「先見森林,後見樹木——掌握 C4 系統上下文圖。」
- 使用 Visual Paradigm AI 工具進行 C4 模型可視化的最終指南: 本指南說明如何利用 AI 驅動的工具,自動化並提升 C4 模型可視化,以加速軟體架構設計。
- 利用 Visual Paradigm 的 AI C4 Studio,簡化架構文件編制: 本文詳細介紹如何使用 AI 增強的工作室,建立乾淨、可擴展且易於維護的軟體架構文件。
- C4-PlantUML Studio 最終指南:革新軟體架構設計: 本資源探討如何將 AI 驅動的自動化、C4 模型的清晰性與 PlantUML 的彈性結合,形成一個強大的單一工具。
- Visual Paradigm AI 驅動 C4 PlantUML Studio 完整指南: 本指南描述了一款於 2025 年底推出的專用工具,可將自然語言提示轉換為分層的 C4 圖表。
- C4-PlantUML Studio | AI 驅動的 C4 圖表生成器: 本功能概覽強調了一款由 AI 驅動的工具,專門用於從簡單的文字描述生成 C4 軟體架構圖。
- 使用 Visual Paradigm AI 聊天機器人生成與修改 C4 組件圖: 本教程示範如何使用 AI 驅動的聊天機器人,迭代式地建立並優化複雜系統的組件層級架構。
- AI 驅動的 C4 圖表生成器:核心層級與支援視圖: 本頁說明 AI 生成器如何支援 C4 模型的四個核心層級——上下文、容器、組件與部署,以提供全面的文件資料。
- AI 圖表生成器:完整支援 C4 模型的版本發布: 此更新詳述了整合 AI 驅動功能,以自動化建立層級式 C4 模型圖表。
- C4 模型 AI 生成器:自動化完整建模生命週期: 本資源強調專用 AI 聊天機器人如何利用對話式提示,確保 DevOps 團隊架構文件的一致性。
- 全面評估:通用 AI 聊天機器人 vs. Visual Paradigm 的 C4 工具: 本比較說明為何像 C4 PlantUML Studio 這樣的專用工具,能提供比通用語言模型更結構化且專業級的成果。













