跳至主要内容

ADR-001: docs-guides 文檔架構

ADR 編號: 001 狀態: 已接受 (Accepted) 決策日期: 2026-02-01 決策者: Development Team


摘要

採用「開發生命週期導向」架構組織 docs-guides/ 文檔,結合開發階段(入門→開發→測試→部署)與技能領域(前端/後端)兩個維度。


背景 (Context)

問題陳述

docs-guides 是 AppFuse 文檔站的主要入口,需要服務以下讀者:

  1. 新加入的開發者:需要快速上手專案
  2. 前端開發者:需要了解如何使用 appfuse-web 開發業務功能
  3. 後端開發者:需要了解如何使用 appfuse-server 開發 API
  4. DevOps 人員:需要了解部署與監控

與框架文檔的區別

面向docs-guidesdocs-server / docs-web
對象應用開發者框架使用者/貢獻者
內容如何用框架建構應用框架本身的功能與 API
視角業務開發者視角框架開發者視角
範例「如何在專案中使用 Cache」「Cache 模組的所有功能」

限制條件

  • 需作為文檔站的主要入口
  • 需同時服務前端與後端開發者
  • 需涵蓋從入門到部署的完整流程
  • 需與框架文檔(docs-server、docs-web)互補

考量的方案 (Options Considered)

方案 A: Diátaxis 框架

說明: 採用 tutorials/how-to/concepts/reference 分類

優點:

  • ✅ 有明確的分類標準
  • ✅ 與 docs-web/guides 一致

缺點:

  • ❌ 前後端內容會混在一起
  • ❌ 開發者習慣按技能領域查詢
  • ❌ 不符合「入門→開發→部署」的學習順序

評分: 2/5


方案 B: 純技能領域分類

說明: 按 frontend/backend/devops 等技能領域劃分

優點:

  • ✅ 符合開發者身份認同
  • ✅ 易於找到對應內容

缺點:

  • ❌ 跨領域內容難以歸類
  • ❌ 入門指南不屬於任何領域
  • ❌ 缺乏學習順序引導

評分: 3/5


方案 C: 開發生命週期導向

說明: 結合開發階段與技能領域,形成矩陣結構

優點:

  • ✅ 有明確的學習路徑(入門→開發→測試→部署)
  • ✅ 開發階段內再按技能領域細分
  • ✅ 新手可循序漸進,老手可直接跳到對應章節
  • ✅ 與實際開發流程對應

缺點:

  • ❌ 需同時維護階段與領域兩個維度
  • ❌ 部分內容可能跨多個階段

評分: 4/5


決策 (Decision)

選擇方案: C - 開發生命週期導向

核心理由:

  1. 提供清晰的學習路徑,新手知道從哪開始
  2. 按技能領域細分,開發者能快速定位
  3. 與實際開發流程對應,符合直覺

目標結構

docs-guides/
├── README.md # 導覽頁(含學習路徑)

├── getting-started/ # 🚀 入門階段
│ ├── README.md
│ ├── setup.md # 環境設定
│ ├── local-development.md # 本地運行
│ └── development-workflow.md # 開發流程

├── concepts/ # 💡 核心概念
│ ├── README.md
│ ├── architecture.md # 系統架構
│ ├── project-structure.md # 專案結構
│ ├── environments.md # 環境配置
│ └── mock-to-real-api.md # Mock → 真實 API

├── frontend/ # 🎨 前端開發
│ ├── README.md
│ ├── appfuse-usage.md # 框架使用
│ ├── applet-development.md # Applet 開發
│ ├── form-handling.md # 表單處理
│ ├── state-management.md # 狀態管理
│ └── project-patterns.md # 專案模式

├── backend/ # ⚙️ 後端開發
│ ├── README.md
│ ├── appfuse-usage.md # 框架使用
│ ├── entity-design.md # Entity 設計
│ ├── database-migration.md # 資料庫遷移
│ └── project-patterns.md # 專案模式

├── testing/ # 🧪 測試階段
│ ├── README.md
│ ├── overview.md # 測試總覽
│ ├── frontend-testing.md # 前端測試
│ ├── backend-testing.md # 後端測試
│ └── e2e-testing.md # E2E 測試

├── deployment/ # 🚢 部署階段
│ ├── README.md
│ ├── overview.md # 部署總覽
│ ├── local.md # 本地部署
│ ├── staging.md # 暫存環境
│ ├── production.md # 生產環境
│ ├── unified-deployment.md # 統一部署
│ ├── monitoring.md # 監控
│ └── troubleshooting.md # 故障排除

├── reference/ # 📖 參考資料
│ ├── README.md
│ ├── project-initialization.md # 專案初始化
│ ├── versioning.md # 版本規範
│ └── contributing.md # 貢獻指南

└── decision-records/ # 📋 架構決策記錄
├── README.md
└── 001-guides-documentation-structure.md

分類定義

開發階段分類

階段目錄讀者狀態內容類型
入門getting-started/「我剛加入專案」環境設定、第一次運行
理解concepts/「我想了解系統」架構、設計決策
開發frontend/ backend/「我要寫程式」實作指南、模式
測試testing/「我要確保品質」測試策略、工具
部署deployment/「我要上線」部署流程、監控
參考reference/「我需要查資料」規範、貢獻指南
決策decision-records/「我想了解為什麼」架構決策記錄

技能領域分類

領域適用目錄說明
前端frontend/、testing/frontend-*React、Applet、表單
後端backend/、testing/backend-*Spring Boot、Entity、API
全端getting-started/、concepts/、deployment/通用知識

實作指南 (Implementation Guidelines)

新增文檔時的判斷流程

這份文檔的主題是什麼?

├─ 環境設定、首次運行
│ └─ → getting-started/

├─ 架構設計、系統概念
│ └─ → concepts/

├─ 前端實作相關
│ └─ → frontend/

├─ 後端實作相關
│ └─ → backend/

├─ 測試相關
│ ├─ 前端測試 → testing/frontend-*
│ ├─ 後端測試 → testing/backend-*
│ └─ 通用測試 → testing/

├─ 部署、監控、維運
│ └─ → deployment/

└─ 規範、指南、參考
└─ → reference/

必須遵守的規則

  1. 開發階段優先:先判斷屬於哪個開發階段,再判斷技能領域
  2. 避免重複:與框架文檔互補,不重複框架 API 說明
  3. 連結框架文檔:涉及框架功能時,連結到 docs-server 或 docs-web
  4. 學習路徑:README.md 需維護學習路徑建議

命名慣例

目錄命名規則範例
getting-started/名詞或動名詞setup.mdlocal-development.md
concepts/名詞architecture.mdenvironments.md
frontend/ backend/名詞-動詞或功能名entity-design.mdform-handling.md
testing/領域-testingfrontend-testing.mde2e-testing.md
deployment/環境名或動詞staging.mdmonitoring.md

檢查清單

新增文檔時:

  • 確認屬於正確的開發階段
  • 確認 sidebar_position 不重複
  • 涉及框架功能時,連結到對應框架文檔
  • 更新該目錄的 README.md(如需要)
  • 如為重要入口,更新主 README.md 的學習路徑

與其他實例的關係

內容邊界

讀者問題                           → 應該去哪裡找?
─────────────────────────────────────────────────────
「如何設定開發環境?」 → docs-guides/getting-started/
「Cache 模組有哪些功能?」 → docs-server/guides/core/cache
「如何在專案中使用 Cache?」 → docs-guides/backend/
「Applet 的設計理念是什麼?」 → docs-web/guides/concepts/
「如何開發一個 Applet?」 → docs-guides/frontend/applet-development
「如何部署到生產環境?」 → docs-guides/deployment/production

交叉引用原則

連結方式
docs-guidesdocs-server「詳細 API 請參閱 Cache 模組
docs-guidesdocs-web「元件規格請參閱 元件庫
docs-guidesdocs-methodology「開發流程詳見 開發方法論
docs-guidesdocs-specs「完整範例請參閱 花店管理系統

權衡分析 (Trade-offs)

我們獲得什麼 (Gains)

  • ✅ 清晰的學習路徑
  • ✅ 按技能領域快速定位
  • ✅ 與實際開發流程對應
  • ✅ 新手友善的入口設計

我們放棄什麼 (Losses)

  • ❌ 與 docs-web/guides 的 Diátaxis 分類不一致
  • ❌ 部分跨階段內容需決定主要歸屬

風險與緩解措施

風險嚴重性機率緩解措施
與框架文檔內容重複明確邊界:應用層 vs 框架層
跨階段內容歸類困難以「主要用途」判斷,輔以交叉連結

相關文檔 (References)

內部文檔

設計理念對照

實例分類方式理由
docs-guides開發生命週期應用層入口,需學習路徑
docs-server功能模組導向工具集框架,按模組查詢
docs-webDiátaxis應用框架,按情境查詢

變更歷史 (Change Log)

日期變更內容變更者
2026-02-01初版,記錄現有架構設計Claude
2026-02-01新增 decision-records/ 目錄至目標結構Claude

文檔維護者: Development Team + AI Assistant 最後審閱: 2026-02-01