以圖形使用者介面為優先的架構所面臨的問題
多年來,C4 建模一直陷入一個悖論:我們提倡「架構即程式碼」,但大多數團隊仍透過在圖形使用者介面中拖曳方塊來建立 C4 圖表。這導致文件過時、二進位檔案中的合併衝突,以及圖表與實際系統之間的脫節。
現代開發團隊需要一種工作流程,其中對話激發設計並程式碼維持其運作。透過結合 Visual Paradigm 的AI 聊天機器人與VPasCode,您可以在幾分鐘內從自然語言提示轉換為生產等級的 C4 PlantUML,完全無需使用滑鼠。

本指南將透過具體的 PlantUML 範例展示該工作流程。
第一階段:使用 AI 聊天機器人進行對話式設計
Visual Paradigm 中的 AI 聊天機器人扮演您的架構協作夥伴。您不是從空白畫布開始,而是從意圖開始。
✅ 有效的提示策略
不要要求 AI「繪製圖表」。請要求它使用 C4 語義對系統進行建模。請明確說明邊界、技術與資料流程。
💬 AI 聊天機器人提示範例:
「請扮演軟體架構師。為『線上銀行系統』建立 C4 容器圖表。包含網頁應用程式(React)、行動應用程式(Flutter)、API 閘道(Kong)、核心銀行服務(.NET)以及 PostgreSQL 資料庫。顯示透過 OAuth2 的驗證流程與帳戶餘額查詢。使用官方巨集輸出有效的 C4-PlantUML 程式碼。」
🤖 預期的 AI 輸出(已精修)
AI 將產生初步的 PlantUML 模型。請批判性地檢視它——AI 擅長結構,但可能會幻覺出關係。使用後續的聊天提示進行精修:“在 API 閘道與核心銀行服務之間新增 Redis 快取,用於會話管理”或“將 PostgreSQL 資料庫標記為已棄用,並新增新的 MongoDB 叢集。”
第二階段:使用 VPasCode 與 PlantUML 進行確定性建模
一旦 AI 產生可行的草稿,停止聊天並開始編碼。將精修後的 PlantUML 複製到.puml由 VPasCode 管理的檔案。這是您的唯一真實來源。
以下是透過此工作流程產生的生產就绪 C4 PlantUML 範例。請確保您的 Visual Paradigm 專案包含C4-PlantUML 函式庫.
範例 1:系統情境圖(第 1 層)
此定義了您系統的邊界及其外部參與者。

@startuml OnlineBanking_Context
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
title 系統情境:線上銀行平台
Person(customer, "銀行客戶", "檢視帳戶、轉帳、繳費")
Person(admin, "後台管理員", "管理使用者、監控交易")
System(banking, "線上銀行平台", "透過網頁與行動裝置提供網路銀行服務")
System_Ext(coreLegacy, "核心銀行主機", "處理交易、維護總帳")
System_Ext(email, "電子郵件服務", "發送通知與報表")
System_Ext(oauth, "OAuth2 提供者", "處理身分與驗證")
Rel(customer, banking, "使用", "HTTPS/WebSocket")
Rel(admin, banking, "管理", "HTTPS")
Rel(banking, coreLegacy, "讀取/寫入", "REST/SOAP")
Rel(banking, email, "發送警示", "SMTP/API")
Rel(banking, oauth, "驗證", "OIDC")
@enduml
範例 2:容器圖(第 2 層)
將系統分解為執行時容器。請注意使用ContainerDb, ContainerQueue以及技術標籤——這對現代雲端原生系統至關重要。

@startuml OnlineBanking_Containers
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
title 容器圖:線上銀行平台
Person(customer, "銀行客戶")
System_Boundary(banking, "線上銀行平台") {
Container(webapp, "Web 應用程式", "React + Node.js", "用於瀏覽器端銀行的單頁應用程式")
Container(mobile, "行動應用程式", "Flutter", "iOS/Android 原生體驗")
Container(api, "API 閘道", "Kong", "路由請求、限流、驗證")
Container(service, "帳戶服務", ".NET 8", "帳戶與餘額的業務邏輯")
Container(cache, "Session 快取", "Redis", "儲存 JWT 權杖與 Session 狀態")
ContainerDb(db, "帳戶資料庫", "PostgreSQL", "客戶帳戶、餘額、交易")
ContainerQueue(events, "事件匯流排", "RabbitMQ", "非同步交易通知")
}
System_Ext(oauth, "OAuth2 提供者")
System_Ext(legacy, "核心銀行主機")
Rel(customer, webapp, "使用", "HTTPS")
Rel(customer, mobile, "使用", "HTTPS")
Rel(webapp, api, "呼叫", "REST/JSON")
Rel(mobile, api, "呼叫", "REST/JSON")
Rel(api, oauth, "驗證權杖", "OIDC")
Rel(api, service, "路由至", "gRPC")
Rel(service, cache, "讀取/寫入 Session", "TCP")
Rel(service, db, "查詢", "SQL/TCP")
Rel(service, events, "發布", "AMQP")
Rel(service, legacy, "同步帳簿", "SOAP")
@enduml
範例 3:元件圖(第 3 層)– 帳戶服務
縮放至單一容器。這正是 VPasCode 的強項:元件可直接對應至程式碼模組。

@startuml AccountService_Components
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
title 元件圖:帳戶服務 (.NET 8)
Container(api, "API 閘道", "Kong")
ContainerDb(db, "帳戶資料庫", "PostgreSQL")
ContainerQueue(events, "事件匯流排", "RabbitMQ")
Component(auth, "Auth 中間件", "ASP.NET Filter", "驗證 JWT、擷取使用者情境")
Component(controller, "AccountController", "ASP.NET API", "/accounts 的 REST 端點")
Component(domain, "AccountDomainService", "C# 類別庫", "餘額計算、轉帳規則")
Component(repo, "AccountRepository", "EF Core", "資料存取、查詢最佳化")
Component(publisher, "EventPublisher", "MassTransit", "發布 TransactionCompleted 事件")
Rel(api, auth, "傳遞請求")
Rel(auth, controller, "轉發已驗證請求")
Rel(controller, domain, "呼叫業務邏輯")
Rel(domain, repo, "查詢/儲存")
Rel(repo, db, "執行 SQL")
Rel(domain, publisher, "產生領域事件")
Rel(publisher, events, "發布", "AMQP")
@enduml
第三階段:將 VPasCode 整合至您的開發工作流程
產生 PlantUML 只是成功的一半。以下是讓其在現代團隊中落實的方法:
將所有內容納入版本控制
儲存所有 .puml檔案與您的應用程式程式碼放在同一個儲存庫中。將圖表視為基礎設施即程式碼:
/docs/architecture/c4/
├── 01-context.puml
├── 02-containers.puml
├── 03-account-service-components.puml
└── README.md
在 CI/CD 中自動化渲染
使用 Visual Paradigm 的 CLI 或 GitHub Action,在每個拉取請求(PR)時自動渲染 PNG/SVG 檔案。切勿手動提交已渲染的影像。
# GitHub Action 範例程式碼片段
- name: 渲染 C4 圖表
run: |
vp-cli render -i docs/architecture/c4/*.puml
-o docs/architecture/output/
-f svg --c4-layout auto
與 VPasCode 進行雙向同步
VPasCode 不僅是渲染器——它是一個 模型同步引擎。當您更新 PlantUML 時:
-
Visual Paradigm 的中央模型會自動更新
-
交叉參照(例如,將元件連結至 Jira 大型專案或 Git 儲存庫)將保持完整
-
使用圖形使用者介面(GUI)的團隊成員會即時看到變更
-
AI 聊天機器人對話可以參照 目前模型狀態,而非過時的快照
⚠️ 重要警告:切勿讓 AI 生成的 PlantUML 跳過人工審查。AI 經常虛構不存在的 API、錯誤標註通訊協定,或遺漏關鍵的安全邊界。在提交前,務必將生成的程式碼與您實際的程式碼庫及威脅模型進行比對驗證。
現代團隊的採用檢查清單
| 步驟 | 行動 | 工具 |
|---|---|---|
| 1 | 透過對話式提示建立初始 C4 模型 | AI 聊天機器人 |
| 2 | 透過迭代對話精確修正 AI 輸出 | AI 聊天機器人 |
| 3 | 將驗證過的 PlantUML 匯出至版本控制儲存庫 | VPasCode |
| 4 | 設定 CI 流程以在合併請求時自動渲染 | VPasCode 命令列介面 |
| 5 | 將 C4 元素連結至程式碼儲存庫、工單與文件 | Visual Paradigm |
| 6 | 安排季度「模型清潔」審查,運用 AI 批判分析 | AI 聊天機器人 |
結語
C4 建模不該成為團隊效能的負擔。將 AI 視為「創意火花」並將 VPasCode 視為「確定性錨點」,您就能兼得兩全其美:快速探索「與」可持續的文檔。停止拖曳方塊。以對話的速度開始架構設計。







