ADR-001: docs-web/guides 文檔架構
ADR 編號: 001 狀態: 提議中 (Proposed) 決策日期: 2026-02-01 決策者: Development Team
摘要
採用 Diátaxis 框架組織 docs-web/guides/ 文檔,明確區分教學、操作指南、概念解釋和參考手冊四種類型。
背景 (Context)
問題陳述
docs-web/guides/ 目錄的文檔結構存在以下問題:
- 入口重複:
README.md、getting-started.md、quickstart/三者功能重疊 - 內容混合:大多數文檔同時包含概念解釋、操作步驟和 API 參考,讀者難以快速找到需要的資訊
- 缺乏明確的組織原則:新增文檔時沒有判斷標準,導致結構逐漸混亂
限制條件
- 需與現有 Docusaurus 機制相容
- 遷移成本需可控(漸進式改善)
- 需同時服務人類讀者與 AI 助手
目的與對象定義
目的 (Purpose)
docs-web/guides/ 的目的是:
協助開發者學習並有效使用 AppFuse Web 框架建構 React 應用程式
具體而言:
- 讓新手能在 30 分鐘內建立第一個專案
- 讓開發者能快速找到特定任務的解決方案
- 提供足夠的背景知識理解設計決策
- 作為 API 和配置的查詢參考
對象 (Audience)
| 對象 | 背景假設 | 主要需求 |
|---|---|---|
| 新手開發者 | 熟悉 React,初次接觸 AppFuse | 快速上手、建立第一個專案 |
| 專案開發者 | 已有 AppFuse 專案經驗 | 解決特定問題、查詢 API |
| 架構評估者 | 評估是否採用 AppFuse | 理解設計理念與權衡 |
| AI 助手 | 協助開發者完成任務 | 準確的規格與範例 |
範圍界定
| 包含 | 不包含 |
|---|---|
| 框架使用指南 | 元件 API 詳細規格(在 components/) |
| 整合與配置說明 | 互動式範例(在 Storybook) |
| 設計理念與決策 | 業務邏輯實作(在參考實作專案) |
考量的方案 (Options Considered)
方案 A: 維持現狀(按功能分類)
說明: 維持現有結構,僅修正重複與命名問題
優點:
- ✅ 無遷移成本
- ✅ 開發者熟悉
缺點:
- ❌ 無法解決內容混合問題
- ❌ 新增文檔仍無判斷標準
評分: 2/5
方案 B: Diátaxis 框架
說明: 採用 Diátaxis 四象限分類:Tutorials、How-to Guides、Explanation、Reference
優點:
- ✅ 有明確的分類標準,每份文檔有清晰的歸屬
- ✅ 業界廣泛採用(Django、NumPy、Gatsby)
- ✅ 符合讀者不同情境的需求
缺點:
- ❌ 需要遷移現有文檔
- ❌ 部分文檔需拆分
評分: 4/5
方案 C: 任務導向結構
說明: 以「我想要...」的任務為主軸組織文檔
優點:
- ✅ 直觀,符合使用者搜尋習慣
- ✅ 易於擴展
缺點:
- ❌ 概念性文檔難以歸類
- ❌ 任務粒度難以統一
評分: 3/5
決策 (Decision)
選擇方案: B - Diátaxis 框架
核心理由:
- 提供明確的分類標準,避免未來再度混亂
- 業界已驗證的方法論,有豐富的參考案例
- 四種類型對應四種閱讀情境,讀者能快速定位
Diátaxis 分類定義
Tutorials(教學)
| 屬性 | 定義 |
|---|---|
| 導向 | 學習導向 (Learning-oriented) |
| 目的 | 帶領讀者從零完成一個具體目標 |
| 讀者狀態 | 「我想學習」 |
| 特徵 | 步驟式、有明確起點與終點、結果可重現 |
| 範例 | 「建立第一個 Applet」、「建立新專案」 |
判斷標準:
- ✅ 有明確的學習目標
- ✅ 讀者跟著做會得到具體成果
- ✅ 假設讀者沒有相關經驗
How-to Guides(操作指南)
| 屬性 | 定義 |
|---|---|
| 導向 | 任務導向 (Task-oriented) |
| 目的 | 解決特定問題或完成特定任務 |
| 讀者狀態 | 「我想完成 X」 |
| 特徵 | 直接給出解決方案、假設讀者有基礎知識 |
| 範例 | 「如何實作表單驗證」、「如何切換 Mock 到真實 API」 |
判斷標準:
- ✅ 標題通常是「如何...」或動詞開頭
- ✅ 假設讀者已了解基礎概念
- ✅ 專注於解決單一問題
Explanation(概念解釋)
| 屬性 | 定義 |
|---|---|
| 導向 | 理解導向 (Understanding-oriented) |
| 目的 | 解釋為什麼這樣設計、提供背景脈絡 |
| 讀者狀態 | 「我想理解為什麼」 |
| 特徵 | 討論式、提供多角度觀點、說明權衡 |
| 範例 | 「Applet 設計模式」、「狀態管理策略」 |
判斷標準:
- ✅ 回答「為什麼」而非「怎麼做」
- ✅ 提供設計決策的背景與理由
- ✅ 可以獨立閱讀,不需跟著操作
Reference(參考手冊)
| 屬性 | 定義 |
|---|---|
| 導向 | 資訊導向 (Information-oriented) |
| 目的 | 提供準確、完整、可查詢的規格資訊 |
| 讀者狀態 | 「我需要查 X 的規格」 |
| 特徵 | 乾燥、結構化、完整性優先 |
| 範例 | 「工具函數 API」、「專案結構說明」、「路由配置規格」 |
判斷標準:
- ✅ 描述性質(是什麼)而非指導性質(怎麼做)
- ✅ 適合快速查閱,不需從頭讀到尾
- ✅ 強調準確性與完整性
目標結構
docs-web/guides/
├── README.md # 導覽頁
│
├── tutorials/ # 🎓 教學
│ ├── _category_.json
│ ├── create-project.md
│ ├── first-applet.md
│ └── first-form.md
│
├── how-to/ # 🔧 操作指南
│ ├── _category_.json
│ ├── form-validation.md
│ ├── handle-api-errors.md
│ ├── switch-mock-to-real.md
│ ├── add-language.md
│ ├── customize-theme.md
│ └── add-route-guard.md
│
├── concepts/ # 💡 概念解釋
│ ├── _category_.json
│ ├── applet-pattern.md
│ ├── state-management.md
│ ├── mock-api-strategy.md
│ └── form-architecture.md
│
└── reference/ # 📖 參考手冊
├── _category_.json
├── project-structure.md
├── routing.md
├── i18n.md
├── messaging.md
├── theming.md
├── utils.md
└── testing.md
實作指南 (Implementation Guidelines)
新增文檔時的判斷流程
這份文檔的主要目的是什麼?
│
├─ 帶讀者從零學會某件事 → tutorials/
├─ 解決特定問題 → how-to/
├─ 解釋為什麼這樣設計 → concepts/
└─ 提供規格資訊供查詢 → reference/
必須遵守的規則
- 單一職責:一份文檔只屬於一個分類,不混合多種類型
- 命名一致:
- tutorials: 動詞 + 名詞(如
create-project.md) - how-to: 動詞 + 任務(如
handle-api-errors.md) - concepts: 名詞 + 概念(如
applet-pattern.md) - reference: 名詞(如
routing.md)
- tutorials: 動詞 + 名詞(如
- 交叉引用:在文檔中適當連結相關的其他類型文檔
檢查清單
新增文檔時:
- 確認文檔屬於哪個分類
- 確認標題符合該分類的命名慣例
- 確認 sidebar_position 不與同目錄其他文檔重複
- 如需引用其他類型內容,使用連結而非複製
相關文檔 (References)
外部資源
相關 ADR
- (待建立)ADR-002: docs-web/components 文檔架構
變更歷史 (Change Log)
| 日期 | 變更內容 | 變更者 |
|---|---|---|
| 2026-02-01 | 初版草稿 | Claude |
文檔維護者: Development Team + AI Assistant 最後審閱: 2026-02-01