Files
NextEdu/docs/architecture/audit/00_summary.md

159 lines
7.9 KiB
Markdown
Raw 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.
# 架构审查汇总报告
> 基于对全项目 69+ 文件的逐文件审查,汇总关键架构问题。
> 审查日期: 2026-06-17
> 子报告:
> - [shared 基础设施层审查](./shared-audit.md)
> - [核心业务模块审查](./core-business-audit.md)
> - [管理模块群审查](./management-modules-audit.md)
> - [新增模块和其他模块审查](./new-and-other-modules-audit.md)
---
## 一、总体评估
| 维度 | 状态 | 说明 |
|------|------|------|
| 模块化程度 | ⚠️ 中等 | 20+ 模块划分合理,但跨模块直接 DB 查询普遍存在 |
| 职责单一性 | ✅ 良好 | 多数模块职责清晰,文件超 1000 行问题已修复(仅 schema.ts 保留) |
| 架构文档质量 | ❌ 不足 | 004 文档按模块罗列函数,缺乏关系图/数据流/调用链 |
| 循环依赖 | ✅ 已修复 | shared/lib ↔ auth 循环依赖通过动态 import 打破 |
| 死代码 | ⚠️ 用户保留 | proctoring/exam-mode-config.tsx 未集成(用户决定保留) |
**核心结论**: 架构设计思路正确(模块化 + 分层),但执行不够严格。主要问题是跨模块直接 DB 查询破坏了模块封装,以及少数文件过大。
---
## 二、P0 严重问题(必须修复)
### 1. 文件超 1000 行硬上限 ✅ 已修复
| 文件 | 行数 | 问题 |
|------|------|------|
| ~~`classes/data-access.ts`~~ | ~~2104~~ → 548 | ~~混入 homework/scheduling/grades 逻辑~~ ✅ 已拆分为 5 个文件 |
| ~~`homework/data-access.ts`~~ | ~~1038~~ → 598 | ~~混入排名计算业务逻辑~~ ✅ 已拆分(新增 stats-service.ts + data-access-write.ts |
| `shared/db/schema.ts` | 1111 | 54 张表混合P2-1 待拆分) |
### 2. 循环依赖 ✅ 已修复
~~shared/lib/{audit-logger, change-logger, auth-guard} → @/auth (src/auth.ts) → shared/lib/* (循环)~~
**已完成修复**2026-06-173 个 logger/guard 文件改用动态 `import("@/auth")` 打破模块级静态循环依赖。
### 3. dashboard 跨模块直接查询 11 张表 ✅ 已修复
~~`dashboard/data-access.ts` 的 `getAdminDashboardData` 直查 sessions/users/classes/textbooks/chapters/questions/exams/homeworkAssignments/homeworkSubmissions/usersToRoles/roles,严重违反模块封装。~~
**已完成修复**2026-06-17dashboard/data-access.ts 改为并行调用各模块的 `get[Module]DashboardStats()` 函数42 行),不再直接查询任何业务表。
### 4. messaging 绕过 notifications 直接写通知 ✅ 已修复
~~`messaging/actions.ts` 第 66-72 行直接调用 `createNotification`,导致用户通知偏好失效、多渠道通知无效。~~
**已完成修复**2026-06-17messaging/actions.ts 改用 `sendNotification` from `@/modules/notifications/dispatcher`,尊重用户通知偏好。
### 5. classSchedule 表三处写入口 ✅ 已修复
~~- `classes/data-access.ts`~~
~~- `scheduling/actions.ts` (直接 transaction 写入)~~
~~- `scheduling/data-access.ts`~~
**已完成修复**2026-06-17scheduling/data-access.ts 新增 `replaceClassSchedule()` 统一写入口scheduling/actions.ts 改为调用该函数,不再直接 transaction 写入。
---
## 三、P1 较严重问题
### 6. 跨模块直接 DB 查询普遍存在
| 被访问表 | 访问次数 | 应归属模块 | 主要违规者 |
|---------|---------|-----------|-----------|
| `classes` | 8+ | classes | exams, homework, grades, dashboard |
| `classEnrollments` | 6+ | classes | homework, grades, attendance |
| `users` | 6+ | users | 多个模块 |
| `subjects` | 6+ | school | exams, homework, questions |
| `exams` | 5+ | exams | homework, grades, dashboard |
### 7. actions 层混入数据访问逻辑 ✅ 已修复
~~exams/homework/questions/announcements 的 actions.ts 中存在直接 `db.insert/update/delete`,应该通过 data-access 层。~~
**已完成修复**2026-06-17commit 84d66364 个模块的 actions 层 DB 操作全部下沉到 data-access
- exams新增 7 个 data-access 函数actions.ts 832→691 行data-access.ts 339→471 行
- homework新建 data-access-write.ts285 行10 个写函数actions.ts 387→239 行
- questions新增 4 个 data-access 函数actions.ts 294→149 行data-access.ts 129→260 行
- announcements新增 5 个 data-access 函数actions.ts 242→197 行data-access.ts 120→171 行
剩余未修复usersupdateUserProfileAction、schedulingapplyAutoScheduleAction/autoScheduleAction
### 8. auth.ts 混合 5 类职责 ✅ 已修复
~~NextAuth 配置 + 密码安全 DB 操作 + 角色规范化 + IP 解析 + 回调函数,应拆分。~~
**已完成修复**2026-06-17auth.ts 拆分出 4 个 shared/lib 文件:
- `password-security-service.ts`84 行)- 密码安全 DB 操作
- `role-utils.ts`31 行)- 角色规范化
- `bcrypt-utils.ts`18 行)- bcrypt 哈希规范化
- `http-utils.ts`27 行)- IP 解析
auth.ts 从 293 行降至 193 行,仅保留 NextAuth 配置。
### 9. users/import-export.ts 四重职责 ✅ 已修复
~~导入解析 + 导出 + 用户创建(含密码哈希) + 班级注册(跨模块写 classEnrollments)。~~
**已完成修复**2026-06-17拆分为 3 个文件:
- `import-export.ts`157 行)- 仅文件解析与生成
- `user-service.ts`82 行)- 用户创建(含密码哈希)
- `class-registration.ts`21 行)- 班级注册(调用 classes/data-access
### 10. proctoring 死代码 ⚠️ 用户决定保留
`exam-mode-config.tsx` 组件已创建但未集成到考试表单,DB schema 有 examMode 字段但表单不收集。
**状态**:用户决定保留该组件,暂不集成也不删除。
---
## 四、架构文档问题
### 当前 004 文档的问题
1. **按模块罗列函数签名**,缺乏全局视角
2. **缺少模块依赖关系图**,无法直观看出模块间如何协作
3. **缺少数据流向图**,不知道数据如何在模块间流动
4. **缺少调用链路**,不知道一个请求从 API 到 DB 的完整路径
5. **缺少分层架构说明**,不知道 shared/modules/app 的层次关系
6. **未标注循环依赖**,给人虚假的"架构清晰"印象
### 理想的架构文档应该
1. **一图胜千言**: 用 ASCII/Mermaid 图展示模块关系
2. **分层清晰**: shared → modules → app 三层,依赖方向单向
3. **数据流明确**: 标注每个核心业务的数据从哪来、到哪去
4. **调用链完整**: 关键 API 的完整调用路径
5. **问题标注**: 明确标注已知的耦合问题和技术债
---
## 五、解耦优先级
### 立即执行(P0)
1. ~~拆分 `classes/data-access.ts`(2104 行 → 按职责拆 3-4 个文件)~~ ✅ 已完成(拆为 5 个文件,均 ≤800 行)
2. ~~拆分 `homework/data-access.ts`(1038 行 → 分离排名逻辑)~~ ✅ 已完成(新增 stats-service.ts + data-access-write.ts
3. ~~修复 shared/lib ↔ auth 循环依赖~~ ✅ 已完成(动态 import
4. ~~dashboard 改为通过各模块 data-access 获取数据~~ ✅ 已完成42 行,调用各模块 stats 函数)
5. ~~messaging 写通知改为通过 notifications dispatcher~~ ✅ 已完成(改用 sendNotification
### 短期执行(P1)
6. ~~统一 classSchedule 写入口到 scheduling 模块~~ ✅ 已完成replaceClassSchedule 统一入口)
7. ~~actions 层移除直接 DB 操作~~ ✅ 部分完成exams/homework/questions/announcements 已修复users/scheduling 待处理)
8. ~~拆分 auth.ts~~ ✅ 已完成(拆分出 4 个 shared/lib 文件auth.ts 降至 193 行)
9. ~~集成 proctoring/exam-mode-config 到考试表单~~ ⚠️ 用户决定保留,暂不处理
10. ~~拆分 users/import-export.ts~~ ✅ 已完成(拆分为 import-export.ts + user-service.ts + class-registration.ts
### 中期执行(P2)
11. 建立模块间数据访问规范(通过对方 data-access 或导出查询函数)
12. schema.ts 按业务域分节(加注释分隔)
13. ~~拆分 `shared/lib/ai.ts`~~ ✅ 已完成P2-2commit 6588f74拆分为 `ai/` 目录 6 个文件,原 ai.ts 保留为重导出)