大文件拆分重构指南
状态: 进行中 | 创建: 2026-02-07
概况
| 文件 |
行数 |
路由数 |
优先级 |
拆分策略 |
src/api/portal.py |
7,089 |
38 |
高 |
提取工具函数 → 按功能域拆分路由 |
src/knowledge/expert_router.py |
2,545 |
— |
中 |
ExpertProfile vs ExpertRouter 分离 |
src/api/admin/sub_accounts_api.py |
1,972 |
— |
中 |
CRUD vs 批量操作 vs 统计分离 |
src/core/engine.py |
1,458 |
— |
低 |
已按阶段组织,保持现状 |
src/main.py |
1,242 |
— |
低 |
路由注册可提取到 src/api/__init__.py |
src/knowledge/dynamic_expert.py |
1,122 |
— |
低 |
Config/Service/Manager 已分离 |
portal.py 拆分计划(7,089 行 → 目标 5 个文件 < 1500 行)
第 1 步 — 已完成 ✅
src/api/portal_utils.py — 会话管理、JWT、密码工具(~100 行)
第 2 步 — 待执行
src/api/portal/
├── __init__.py # 导入并聚合所有子路由
├── auth.py # 登录 / 注册 / 登出(~800 行)
├── dashboard.py # 仪表板 / 充值 / 账单(~1200 行)
├── keys.py # API Key 管理(~600 行)
├── revenue.py # 收入 / 结算 / 提现(~1000 行)
├── training.py # 训练页面(~800 行)
├── evaluation.py # 评估页面(~800 行)
├── experts.py # 专家管理(~800 行)
├── analytics.py # 分析页面(~400 行)
└── styles.py # CSS 样式定义(~600 行)
迁移方式
- 新建子模块文件,将对应路由复制过去
- 在
__init__.py 中聚合: router.include_router(auth_router)
- 修改
main.py 的导入指向新包
- 运行全部测试确认无回归
- 删除旧
portal.py
expert_router.py 拆分计划(2,545 行)
src/knowledge/
├── expert_router.py # ExpertRouter 类(~1500 行)
├── expert_profile.py # ExpertProfile 数据类(~300 行)
└── expert_helpers.py # get_low_confidence_message 等辅助函数(~200 行)
通用重复代码模式(建议统一)
| 模式 |
出现次数 |
建议 |
async with AsyncSessionLocal() as session: |
250+ |
已有 get_db 依赖注入,推荐逐步迁移 |
admin = await verify_admin(...) |
200+ |
已是统一调用,可考虑改为 FastAPI Depends |
return {"success": False, "error": ...} |
300+ |
定义 APIResponse 模型统一返回格式 |