260 lines
10 KiB
Markdown
260 lines
10 KiB
Markdown
# 班级管理功能分析报告
|
||
|
||
> 分析日期: 2026-02-22
|
||
> 分析范围: 学校端 vs 教师端 班级管理功能
|
||
|
||
---
|
||
|
||
## 一、行业最佳实践(调研总结)
|
||
|
||
### 1.1 幼儿园班级管理特点
|
||
|
||
根据调研,幼儿园班级管理通常采用**"主班+配班+保育员"**的三角协作模式:
|
||
|
||
| 角色 | 职责 |
|
||
|-----|------|
|
||
| **主班教师** | 班级负责人,制定教学计划、统筹班级管理、家园沟通 |
|
||
| **配班教师** | 协助主班完成教学,关注个体差异,补充教学 |
|
||
| **保育员** | 生活照料、卫生保健、协助教学活动 |
|
||
|
||
### 1.2 教务系统班级管理标准功能
|
||
|
||
根据行业调研,标准的班级管理功能应包括:
|
||
|
||
**学校管理层(学校端)**:
|
||
- 班级的创建、编辑、删除
|
||
- 班级信息设置(名称、年级、教室等)
|
||
- 班主任/主班教师分配
|
||
- 班级容量设置
|
||
- 班级学生管理(分配、调班)
|
||
- 班级统计数据查看
|
||
|
||
**教师层(教师端)**:
|
||
- 查看自己负责的班级
|
||
- 查看班级学生列表
|
||
- 班级教学记录
|
||
- 学生表现记录
|
||
- 家园沟通
|
||
|
||
---
|
||
|
||
## 二、当前系统实现分析
|
||
|
||
### 2.1 数据模型现状
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 当前数据模型 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌──────────┐ ┌──────────┐ │
|
||
│ │ Class │ ◄───────│ Teacher │ │
|
||
│ │ │ 1:N? │ │ │
|
||
│ │teacherId │ │classIds[]│ │
|
||
│ └────┬─────┘ └──────────┘ │
|
||
│ │ │
|
||
│ │ 1:N │
|
||
│ ▼ │
|
||
│ ┌──────────┐ │
|
||
│ │ Student │ │
|
||
│ │ classId │ │
|
||
│ └──────────┘ │
|
||
│ │
|
||
│ 问题:双向关联(Class.teacherId + Teacher.classIds) │
|
||
│ 容易导致数据不一致 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 现有关联关系
|
||
|
||
| 关系 | 方式 | 问题 |
|
||
|-----|------|------|
|
||
| Class → Teacher | `Class.teacherId` (外键) | 只能指向一个教师 |
|
||
| Teacher → Classes | `Teacher.classIds` (JSON数组) | 可指向多个班级 |
|
||
| Student → Class | `Student.classId` (外键) | 正常 |
|
||
|
||
### 2.3 当前数据状态
|
||
|
||
```
|
||
Classes:
|
||
- 中一班 (id=1): teacher_id=1 (李老师)
|
||
- 大一班 (id=2): teacher_id=NULL (未分配)
|
||
|
||
Teachers:
|
||
- 李老师 (id=1): class_ids=[1,2] (声称负责2个班级)
|
||
|
||
Students:
|
||
- 3名学生属于中一班
|
||
- 2名学生属于大一班
|
||
```
|
||
|
||
**问题发现**:李老师的 `class_ids` 包含 [1,2],但大一班的 `teacher_id` 是 NULL,数据不一致。
|
||
|
||
---
|
||
|
||
## 三、需求对比分析
|
||
|
||
### 3.1 学校端 vs 教师端 职责划分
|
||
|
||
| 功能 | 学校端(管理视角) | 教师端(执行视角) |
|
||
|-----|------------------|------------------|
|
||
| **班级创建** | ✅ 可创建/编辑/删除班级 | ❌ 无权限 |
|
||
| **教师分配** | ✅ 分配班主任/配班教师 | ❌ 无权限 |
|
||
| **学生分配** | ✅ 分配学生到班级 | ❌ 无权限(调班需审批) |
|
||
| **查看班级列表** | ✅ 查看全校所有班级 | ✅ 只看自己负责的班级 |
|
||
| **查看学生列表** | ✅ 查看全校所有学生 | ✅ 只看自己班级的学生 |
|
||
| **班级统计** | ✅ 全校统计数据 | ✅ 自己班级的统计 |
|
||
| **教学记录** | ✅ 查看所有记录 | ✅ 创建/查看自己的记录 |
|
||
|
||
### 3.2 教师与班级的关系场景
|
||
|
||
**场景1:单一班主任制**(当前实现)
|
||
```
|
||
班级 ──1:1──► 主班教师
|
||
```
|
||
- 一个班级只有一个班主任
|
||
- 一个教师可以负责多个班级
|
||
- 简单直接,适合小型幼儿园
|
||
|
||
**场景2:多教师协作制**(行业推荐)
|
||
```
|
||
班级 ──1:N──► 教师(主班、配班、保育员)
|
||
```
|
||
- 一个班级有多个教师,角色不同
|
||
- 需要中间表 ClassTeacher 关联
|
||
- 适合规范化管理的幼儿园
|
||
|
||
---
|
||
|
||
## 四、当前实现的问题
|
||
|
||
### 4.1 架构问题
|
||
|
||
| 问题 | 描述 | 影响 |
|
||
|-----|------|------|
|
||
| **双向冗余关联** | `Class.teacherId` + `Teacher.classIds` 同时存在 | 数据不一致风险 |
|
||
| **缺少角色区分** | 无法区分主班/配班教师 | 无法支持协作教学 |
|
||
| **权限控制不清晰** | 部分API权限边界模糊 | 教师可能访问不该访问的数据 |
|
||
|
||
### 4.2 功能缺失
|
||
|
||
| 缺失功能 | 重要性 | 说明 |
|
||
|---------|-------|------|
|
||
| 配班教师管理 | 中 | 当前只支持单一班主任 |
|
||
| 学生调班 | 高 | 学校端无法给学生调班 |
|
||
| 班级归档 | 低 | 学期结束后班级处理 |
|
||
| 历史班级 | 低 | 查看往年班级信息 |
|
||
|
||
---
|
||
|
||
## 五、方案建议
|
||
|
||
### 5.1 短期方案(最小改动)
|
||
|
||
保持现有数据结构,修复数据一致性问题:
|
||
|
||
1. **统一关联关系**:以 `Class.teacherId` 为主,`Teacher.classIds` 作为缓存字段
|
||
2. **同步机制**:每次更新班级教师时,同步更新 `Teacher.classIds`
|
||
3. **API规范化**:
|
||
- 学校端:完全控制班级-教师关联
|
||
- 教师端:只读访问自己负责的班级
|
||
|
||
```
|
||
修改点:
|
||
- SchoolService 中更新班级教师时同步 Teacher.classIds
|
||
- TeacherCourseService 使用 Class.teacherId 查询(已实现)
|
||
```
|
||
|
||
### 5.2 中期方案(增加配班支持)
|
||
|
||
引入中间表,支持多教师协作:
|
||
|
||
```sql
|
||
-- 新增:班级教师关联表
|
||
CREATE TABLE class_teachers (
|
||
id INTEGER PRIMARY KEY,
|
||
class_id INTEGER NOT NULL,
|
||
teacher_id INTEGER NOT NULL,
|
||
role TEXT NOT NULL DEFAULT 'MAIN', -- MAIN主班, ASSIST配班, CARE保育
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (class_id) REFERENCES classes(id),
|
||
FOREIGN KEY (teacher_id) REFERENCES teachers(id),
|
||
UNIQUE(class_id, teacher_id)
|
||
);
|
||
```
|
||
|
||
**功能扩展**:
|
||
- 学校端可分配主班/配班教师
|
||
- 教师端可看到同班级的协作教师
|
||
- 授课记录可关联多个教师
|
||
|
||
### 5.3 长期方案(完整教务系统)
|
||
|
||
考虑学期、年级升级等复杂场景:
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 完整班级管理模型 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ Class (班级) │
|
||
│ ├── name: 班级名称 │
|
||
│ ├── grade: 年级(小班/中班/大班) │
|
||
│ ├── academicYear: 学年 │
|
||
│ ├── status: 状态(ACTIVE/ARCHIVED) │
|
||
│ │ │
|
||
│ ClassTeacher (班级教师关联) │
|
||
│ ├── classId │
|
||
│ ├── teacherId │
|
||
│ ├── role: MAIN/ASSIST/CARE │
|
||
│ └── isPrimary: 是否班主任 │
|
||
│ │
|
||
│ StudentClassHistory (学生班级历史) │
|
||
│ ├── studentId │
|
||
│ ├── classId │
|
||
│ ├── startDate │
|
||
│ └── endDate (调班时设置) │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 六、建议的实施优先级
|
||
|
||
| 优先级 | 任务 | 工作量 | 收益 |
|
||
|-------|------|-------|------|
|
||
| **P0** | 修复数据不一致问题 | 小 | 系统稳定性 |
|
||
| **P0** | 统一API权限边界 | 中 | 安全性 |
|
||
| **P1** | 学校端学生调班功能 | 中 | 核心功能完整性 |
|
||
| **P2** | 配班教师支持 | 大 | 教学协作 |
|
||
| **P3** | 学期/历史班级 | 大 | 长期运营需求 |
|
||
|
||
---
|
||
|
||
## 七、总结
|
||
|
||
### 当前状态评估
|
||
|
||
| 维度 | 评分 | 说明 |
|
||
|-----|------|------|
|
||
| 数据模型 | 6/10 | 基本可用,但有冗余 |
|
||
| 功能完整性 | 7/10 | 核心功能具备,缺少调班 |
|
||
| 权限控制 | 7/10 | 已修复,基本合理 |
|
||
| 扩展性 | 5/10 | 单班主任模式限制扩展 |
|
||
|
||
### 关键决策点
|
||
|
||
1. **是否需要配班教师?**
|
||
- 如果是 → 采用中期方案,引入中间表
|
||
- 如果否 → 采用短期方案,修复现有问题即可
|
||
|
||
2. **`Teacher.classIds` 是否保留?**
|
||
- 保留:作为缓存字段,提升查询性能
|
||
- 移除:简化模型,避免数据不一致
|
||
- 建议:保留但改为只读,由系统自动同步
|
||
|
||
---
|
||
|
||
*分析完成于 2026-02-22*
|