docs(modularization): 建立模組化治理守門
All checks were successful
CD Pipeline / deploy (push) Successful in 1m36s

This commit is contained in:
OoO
2026-04-30 14:07:10 +08:00
parent db21e7e8e8
commit c2e38be43d
13 changed files with 176 additions and 5 deletions

View File

@@ -0,0 +1,49 @@
# 模組化治理指南
> 目的:讓 EwoooC 後續功能不再回到「單一巨檔、分類不清、共用邏輯複製貼上」的狀態。
## 分層規則
| 層級 | 放什麼 | 不放什麼 |
|---|---|---|
| `app.py` | Flask 初始化、Blueprint 註冊、啟動自檢、版本 | route 實作、DB 查詢、商業邏輯、排程任務 |
| `routes/` | HTTP request/response、表單參數解析、權限 decorator、呼叫 service | 大量資料轉換、外部 API client、可重用計算 |
| `services/` | 商業邏輯、AI pipeline、外部 API client、報表生成、可重用流程 | Flask request 物件、template rendering、route-only glue |
| `database/` | ORM models、DB manager、schema helpers、migration baseline | HTTP/Telegram/AI side effect |
| `utils/` | 無狀態純工具、字串/時間/安全 helper | 需要 DB/session/env-heavy 的流程 |
| `templates/` | Jinja UI | Python business rule |
## 檔案尺寸規則
- 300 行以下:健康範圍。
- 300-600 行:可接受,但新增功能前要確認是否能抽 service/helper。
- 600-800 行警戒範圍PR/commit 需說明為何不拆。
- 800 行以上:技術債範圍;只能做 bugfix、安全修補、或「往外抽」的過渡改動。新增功能應先拆模組。
- 新增超過 800 行的 Python 檔案必須更新 `docs/memory/code_modularization_inventory_20260430.md`,否則 `tests/test_modularization_governance.py` 會失敗。
## 新功能落點決策
1. 先問:這是 HTTP endpoint、商業流程、DB access、外部 API、還是純工具
2. endpoint 只新增到對應 Blueprint不新增到 `app.py`
3. route 內超過 40 行的資料處理,優先抽到 `services/`
4. 兩個以上 route 需要同一段邏輯時,第一次就抽 shared service不複製貼上。
5. service 需要 DB 時,透過既有 `DatabaseManager` / repository-style helper不在 route 裡反覆建立 engine。
6. AI 自動化、告警、自癒相關變更需同步檢查 `docs/AI_INTELLIGENCE_MODULE_SOT.md`
## 拆大檔順序
優先處理「又大又承擔多種責任」的檔案:
1. `routes/openclaw_bot_routes.py`:拆成 route、bot command service、learning/report service、scheduler hook。
2. `routes/sales_routes.py`:拆 dashboard/page routes、API routes、chart/query service。
3. `scheduler.py`:拆 task registry、crawler jobs、report jobs、notification jobs。
4. `routes/ai_routes.py` / `routes/vendor_routes.py`:把資料處理與整合邏輯移到 services。
5. `services/ppt_generator.py`:拆 deck orchestration、chart builders、slide templates。
## Review 檢查表
- 是否新增 `@app.route`?若是,退回改 Blueprint。
- route 是否直接包含大量 SQL、DataFrame、AI prompt 組裝或外部 API 呼叫?若是,抽 service。
- 是否讓既有 >800 行檔案淨增加?若是,先抽模組或更新 inventory 與拆分計畫。
- 是否新增重複 cache / DB manager / Telegram / AI client 初始化?若是,改用既有 service。
- 是否需要更新 ADR、memory、SOT 或 guide若是本次 commit 一起更新。