refactor: P0-1/2/4 解耦修复 - 拆分过耦合文件 + dashboard 解耦

This commit is contained in:
SpecialX
2026-06-18 01:45:55 +08:00
parent 220061d62e
commit 62be0b9404
18 changed files with 2534 additions and 2130 deletions

View File

@@ -30,8 +30,8 @@
| 文件 | 行数 | 问题 |
|------|------|------|
| `classes/data-access.ts` | 2104 | 混入 homework/scheduling/grades 逻辑 |
| `homework/data-access.ts` | 1038 | 混入排名计算业务逻辑 |
| ~~`classes/data-access.ts`~~ | ~~2104~~ → 656 | ~~混入 homework/scheduling/grades 逻辑~~ ✅ 已拆分为 5 个文件 |
| ~~`homework/data-access.ts`~~ | ~~1038~~ → 596 | ~~混入排名计算业务逻辑~~ ✅ 已拆分 |
| `shared/db/schema.ts` | 1111 | 54 张表混合(可接受,但需分节) |
### 2. 循环依赖
@@ -114,8 +114,8 @@ NextAuth 配置 + 密码安全 DB 操作 + 角色规范化 + IP 解析 + 回调
## 五、解耦优先级
### 立即执行(P0)
1. 拆分 `classes/data-access.ts`(2104 行 → 按职责拆 3-4 个文件)
2. 拆分 `homework/data-access.ts`(1038 行 → 分离排名逻辑)
1. ~~拆分 `classes/data-access.ts`(2104 行 → 按职责拆 3-4 个文件)~~ ✅ 已完成(拆为 5 个文件,均 ≤800 行)
2. ~~拆分 `homework/data-access.ts`(1038 行 → 分离排名逻辑)~~ ✅ 已完成
3. 修复 shared/lib ↔ auth 循环依赖
4. dashboard 改为通过各模块 data-access 获取数据
5. messaging 写通知改为通过 notifications dispatcher

View File

@@ -43,7 +43,7 @@ app/ ──▶ modules/ ──▶ shared/
### P0 严重问题(必须立即修复)
#### P0-1 `classes/data-access.ts` 2104 行,超硬上限 2.1 倍
#### P0-1 `classes/data-access.ts` 2104 行,超硬上限 2.1 倍 ✅ 已修复
**问题**
- 文件行数 2104远超 1000 行硬上限
@@ -58,18 +58,21 @@ app/ ──▶ modules/ ──▶ shared/
**解耦方案**
```
src/modules/classes/
├── data-access.ts # 班级核心 CRUD目标 ≤500 行)
├── data-access-stats.ts # 班级统计查询(getHomeworkStats 等
├── data-access-schedule.ts # 班级课表查询(getClassSchedule 等
── data-access-grades.ts # 班级成绩汇总getClassGradeSummary 等
├── data-access.ts # 班级核心 CRUD656 行)
├── data-access-stats.ts # 班级统计查询(604 行
├── data-access-schedule.ts # 班级课表查询(230 行
── data-access-students.ts # 学生相关查询280 行
└── data-access-admin.ts # 管理员班级管理441 行)
```
**迁移步骤**
1. 创建 3 个新文件,按职责迁移对应函数
2.`data-access.ts` 中 re-export 以保持向后兼容
1. ~~创建 3 个新文件,按职责迁移对应函数~~ ✅ 已创建 4 个新文件
2. ~~在 `data-access.ts` 中 re-export 以保持向后兼容~~ ✅ 已完成
3. 逐步更新调用方 import 路径
4. 最终移除 re-export强制使用新路径
**完成状态**2026-06-17 已完成拆分,所有文件均 ≤800 行,通过 re-export 保持向后兼容
---
#### P0-2 `homework/data-access.ts` 1038 行,混入排名计算
@@ -380,9 +383,9 @@ src/shared/lib/ai/
| 1 | P0-3 修复循环依赖 | shared/lib + auth.ts | 低 |
| 2 | P0-5 messaging 改用 dispatcher | messaging + notifications | 低 |
| 3 | P0-6 统一 classSchedule 写入口 | classes + scheduling | 中 |
| 4 | P0-2 拆分 homework/data-access | homework | 中 |
| 4 | ~~P0-2 拆分 homework/data-access~~ | homework | 中 |
| 5 | P0-4 dashboard 改用模块 data-access | dashboard + 11 个模块 | 高 |
| 6 | P0-1 拆分 classes/data-access | classes + 多个调用方 | 高 |
| 6 | ~~P0-1 拆分 classes/data-access~~ | classes + 多个调用方 | 高 |
### 第二阶段P1 修复(建议 2-4 周)

View File

@@ -12,7 +12,7 @@
| 模块 | 行数(最大文件) | 职责单一性 | 耦合度 | 严重度 |
|------|----------------|-----------|--------|--------|
| school | 325 | ✅ 良好 | ✅ 低 | 🟢 合格 |
| classes | **2104** | ❌ 严重违反 | ❌ 严重 | 🔴 严重 |
| classes | ~~2104~~ → 656 | ✅ 已修复 | ❌ 严重 | 🟡 需改进 |
| scheduling | 310算法/ 302actions | ✅ 算法独立 | ⚠️ 中 | 🟡 需改进 |
| attendance | 271 | ✅ 良好 | ⚠️ 中 | 🟢 合格 |
| users | 291import-export | ❌ 违反 | ❌ 高 | 🟠 较严重 |
@@ -21,7 +21,7 @@
| announcements | 242 | ⚠️ 部分违反 | ✅ 低 | 🟡 需改进 |
**核心结论**
1. `classes` 模块是全项目耦合最严重的模块,单文件 2104 行远超 1000 行硬性上限,混入了 schedule、homework、grades 三个业务领域的逻辑。
1. ~~`classes` 模块是全项目耦合最严重的模块,单文件 2104 行远超 1000 行硬性上限,混入了 schedule、homework、grades 三个业务领域的逻辑。~~ ✅ 已修复2026-06-17 拆分为 5 个文件,均 ≤800 行)
2. `users/import-export.ts` 违反单一职责,同时处理导入、导出、用户创建、班级注册四类逻辑。
3. `scheduling/auto-scheduler.ts` 是算法独立化的**优秀范例**,纯函数、无 DB 访问、可独立测试。
4. `announcements``audit` 模块的 data-access 层不完整,写操作或导出逻辑泄漏到 actions 层。
@@ -49,11 +49,11 @@
---
### 2.2 classes 模块 — 🔴 严重
### 2.2 classes 模块 — 🟡 需改进(文件拆分已修复,跨模块耦合仍存在)
**文件清单**actions.ts (765 行) / data-access.ts (**2104 行**) / types.ts (201 行)
**文件清单**actions.ts (765 行) / data-access.ts (656 行) / data-access-stats.ts (604 行) / data-access-schedule.ts (230 行) / data-access-students.ts (280 行) / data-access-admin.ts (441 行) / types.ts (201 行)
> ⚠️ `data-access.ts` 达 2104 行,**超出 1000 行硬性上限 2 倍**,违反项目代码质量规则
> `data-access.ts` 已于 2026-06-17 拆分为 5 个文件,所有文件均 ≤800 行,通过 re-export 保持向后兼容
#### 2.2.1 职责混乱 — 混入三个外部业务领域