Launch Atlas logoLaunch.Atlas
#24Design架構師系統分析

C4 圖 · 四層架構視圖

用四層抽象讓每種角色看到「他需要看的那層」

C4 圖 · 四層架構視圖 · 卡片插圖
CHOOSE YOUR MODE

先決定你現在是要學,還是要在專案裡做

網站負責解釋與分發工作包;真正的 Repository 掃描、缺口判斷與文件產出交給 Coding Agent。

SDLC 實作課 · 交付物練習

先理解這份文件替你消除什麼不確定

用四層抽象讓每種角色看到「他需要看的那層」

Architect 在白板上畫一張圖,工程師看不懂、PM 看不懂、SRE 看不懂,因為每個人想看的抽象層不同。

C4 模型(Context / Container / Component / Code)的價值是分層:高層給 stakeholder、中層給工程師、低層給 code reviewer。

沒有 C4,每次溝通都得重畫一張新圖。

OWNER & HANDOFF

誰負責、交給誰

主責: Architect

協作: SA(補系統行為)、Dev Lead(補實作脈絡)、SRE(補營運視角)

下游收件: 工程團隊(理解邊界)、新人(onboarding)、stakeholder(理解整體)

WHEN TO USE

何時值得做

REQUIRED

必要時機: 跨系統整合、團隊 ≥ 10 人、有外部 stakeholder 需要溝通架構

SKIP

不需要時: 單一 monolith 小團隊、PoC、純前端 SPA

CAUTION

常見誤用: 一張圖塞所有東西(變成義大利麵);每層 C4 應對應一種讀者,不要混層

看懂5 段骨架知道每段要留下哪一種判斷
看會SmartTrip 案例對照真實素材如何形成結論
做出自己的草稿手動貼到 Claude Code、Codex 或其他 Agent
  1. 01讀大綱
  2. 02看案例
  3. 03填素材
  4. 04貼提示詞
  5. 05對照驗收

Anatomy · 文件解剖

輕量版先回答 5 個核心章節

章節名稱可以因團隊調整,但每一段要求的判斷不能被省略。先讀問題,再看格式。

  1. 01

    Executive Summary

    範本必要章節

    3-5 行說明本圖讀者、抽象層、不畫的部分

  2. 02

    Level 1 — System Context

    範本必要章節

    只放本 system + actor + external systems。不能出現 container / component

  3. 03

    Level 2 — Containers

    範本必要章節

    列出 ≤ 7 個 container。每個 container 必含 tech + responsibility

  4. 09

    Architecture Risks

    範本必要章節

    至少列 3 個架構風險(單點故障 / cyclic dependency / 跨 boundary chatty call)

  5. 12

    Confidence & Sources & TODO

    範本必要章節

    把已確認的內容、判斷依據與仍待補充的資訊清楚分開。

Study · 對照學習

同一份交付物,先練核心,再看完整深度

輕量範本適合第一次練習與 MVP;完整範本保留跨職能交棒需要的細節。兩者都要求未知事項保持可見。

LIGHT TEMPLATE

30 分鐘內先完成核心章節。

---
doc_type: "c4-diagram"
variant: "light"
status: "draft"
owner: "<your-name>"
last_updated: "YYYY-MM-DD"
upstream:
  required: ["codebase-structure", "adr"]
  optional: ["stakeholder-map"]
---

# C4 Architecture: <system-name>

**Status:** Draft · **Owner:** <Architect> · **Last updated:** YYYY-MM-DD

> [!IMPORTANT]
> **AI 填寫規則:** 本範本 5 段(編號 1, 2, 3, 9, 12),全部必填——刻意沿用完整版的章節編號讓兩版可對照。輕量版只畫 Level 1 (Context) + Level 2 (Container) 兩層。每結論行內加 `(依據:codebase §XXX / ADR-NNN)`;每欄位帶 `[H]/[M]/[L]` confidence badge;缺資料寫 `_TODO: 需要 XXX_` 不編造模組;**分層紀律:Level 1 只放 system + actor + external,Level 2 才放 container**,任何混層必須在 Omitted 段解釋。

---

## 1. Executive Summary

<!-- ai-fill: 3-5 行說明本圖讀者、抽象層、不畫的部分 -->

<3-5 行說明:本圖給誰看、含哪些層、為何不畫某層>

> **TL;DR:** <一句話:系統邊界 + 主要外部依賴>

---

## 2. Level 1 — System Context

<!-- ai-rule: 只放本 system + actor + external systems。不能出現 container / component -->

```mermaid
C4Context
    title System Context: <system-name>
    Person(user, "End user", "<persona description>")
    System(sys, "<System name>", "<one-line responsibility>")
    System_Ext(idp, "Identity Provider", "<e.g. Auth0>")
    System_Ext(payment, "Payment Gateway", "<e.g. Stripe>")
    Rel(user, sys, "uses")
    Rel(sys, idp, "authenticates via", "OAuth2")
    Rel(sys, payment, "charges via", "HTTPS")
```

### Actors & External Systems

| Element | Type | Responsibility | Source |
|---|---|---|---|
| End user | Actor | <persona> | <ref> |
| Identity Provider | External | OAuth2 IdP | ADR-002 |
| Payment Gateway | External | 收款 | ADR-003 |

---

## 3. Level 2 — Containers

<!-- ai-rule: 列出 ≤ 7 個 container。每個 container 必含 tech + responsibility -->

```mermaid
C4Container
    title Containers: <system-name>
    Person(user, "End user")
    Container_Boundary(c1, "<system-name>") {
        Container(web, "Web FE", "Next.js 15", "SSR / SPA")
        Container(api, "API", "Node.js 20", "REST / business logic")
        ContainerDb(db, "Database", "Postgres 16", "OLTP store")
    }
    Rel(user, web, "uses", "HTTPS")
    Rel(web, api, "calls", "REST/JSON")
    Rel(api, db, "reads/writes", "SQL")
```

| Container | Tech | Responsibility | Confidence | Source |
|---|---|---|---|---|
| Web FE | Next.js 15 | SSR + SPA | **[H]** | ADR-001 |
| API | Node.js 20 | Business logic | **[H]** | ADR-001 |
| Database | Postgres 16 | OLTP store | **[H]** | ADR-004 |

---

## 9. Architecture Risks

<!-- ai-rule: 至少列 3 個架構風險(單點故障 / cyclic dependency / 跨 boundary chatty call) -->

> **R1:** <e.g. API → DB 單點故障> — **Severity:** H — **Follow-up:** 開 ADR 評估 read replica
>
> **R2:** ...
>
> **R3:** ...

---

## 12. Confidence & Sources & TODO

- **整份文件最低 confidence 欄位:** <列出所有 [L] 與 [M]>
- **Fabricated assumptions(推測但 input 未明說):**
  - <假設 1:例:假設 IdP 是 external(codebase 沒明示)>
- **Highest-value next input:** <下一份最該補的:deployment topology / ADR / DDD context map>

### TODO(缺資料)

- _TODO: 需要 SA 確認 Payment Gateway 是同步 vs webhook 模式_

---

> [!CAUTION]
> **輸出前 AI 自檢:**
> - [ ] 5 段 H2 章節齊全(編號 1, 2, 3, 9, 12,刻意不連號)
> - [ ] Level 1 (Context) 不含 container / component
> - [ ] Level 2 (Container) 每個 container 含 tech + responsibility + confidence
> - [ ] 每個 element / relationship 有 source(codebase / ADR ref)
> - [ ] ≥ 3 個架構風險點(單點 / cyclic / chatty)
> - [ ] Mermaid C4 語法可渲染(C4Context / C4Container)
> - [ ] 無 YAML / JSON schema 輸出(C4 是給人讀的 markdown + mermaid)

Practice · 換你試做

先用自己的話交代素材,不需要先學會工程術語

確定的就寫,不確定的留白。下一步要做的是請 Agent 找缺口,不是讓它替你猜一套合理答案。

可以先留白;複製提示詞後再到 Coding Agent 裡補充。

AI Practice · 手動三步

先問、再寫、最後審,不把整條流程鎖死

每一步都是獨立工作包。你可以停下補資料、修改限制或重做某一步,不需要服從固定的 Agent 接力流程。

STEP 01

只找阻擋文件成立的未知

先補會改變範圍、判斷或驗收結果的資訊,不急著寫文件。

我要製作「C4 圖 · 四層架構視圖」。先不要產出文件。

請根據我的素材,找出會影響這份文件正確性或可執行性的未知事項,一次最多問 5 題。

每題請包含:
1. 問題
2. 為什麼現在必須知道
3. 它會影響哪個章節或決定

已經回答的事不要重問;可以延後的事標成「待決策」;不要替我猜答案。

本文件的核心章節:Executive Summary、Level 1 — System Context、Level 2 — Containers、Architecture Risks、Confidence & Sources & TODO

複製後,請在標示位置貼上自己的素材。

Review · 自己驗收

文件存在,不代表下一個角色真的能使用

逐條檢查 Agent 的輸出。人類負責需求、限制與驗收,也必須能說明重要結論從哪裡來。

CHECKED0 / 6
NEXT HANDOFF

帶著這份文件,繼續到「API Spec · OpenAPI 契約」

下一張卡會接住新的決策問題;不用一次把整條 SDLC 全做完。

前往下一張卡