Files
ewoooc/docs/guides/modularization_governance.md
OoO c2e38be43d
All checks were successful
CD Pipeline / deploy (push) Successful in 1m36s
docs(modularization): 建立模組化治理守門
2026-04-30 14:07:10 +08:00

50 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 模組化治理指南
> 目的:讓 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 一起更新。