Files
student_manage_system/docs/01-architecture-design.md
T

252 lines
11 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.
# 学生管理系统 — 架构设计文档
## 1. 系统概述
学生管理系统(SMS)是一个面向教育培训机构的后台管理系统,提供学生信息管理、成绩管理、就业管理、班级管理及教师管理五大核心功能,以及统计分析大盘接口。
- **项目定位**:教培行业轻量级 SaaS 后台
- **技术栈**:FastAPI + SQLAlchemy + PyMySQL + SQLite(开发)/ MySQL(生产)
- **目标用户**:教务管理员、班主任、顾问老师
---
## 2. 总体架构
### 2.1 架构分层
```
┌─────────────────────────────────────────────────┐
│ Client / Frontend │
│ (Vue3 / 静态页面 / Postman) │
└────────────────────────┬────────────────────────┘
│ HTTP/REST
┌────────────────────────▼────────────────────────┐
│ API Gateway / Load Balancer │
│ (Nginx / Caddy,可选) │
└────────────────────────┬────────────────────────┘
│
┌────────────────────────▼────────────────────────┐
│ FastAPI 应用层 │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────┐ │
│ │ Routers │ │ Middlewares │ │ Services│ │
│ │ (REST API) │ │ (CORS/Auth) │ │ (待扩展) │ │
│ └──────┬──────┘ └──────────────┘ └────┬────┘ │
│ │ │ │
│ ┌──────▼──────┐ ┌────────▼────┐ │
│ │ Schemas │ │ Validators │ │
│ │(Pydantic) │ │ (业务校验) │ │
│ └──────┬──────┘ └─────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ Services │ ◄──── 业务逻辑(待拆分) │
│ └──────┬──────┘ │
└─────────┼────────────────────────────────────────┘
│ SQLAlchemy ORM
┌─────────▼────────────────────────────────────────┐
│ 数据访问层 │
│ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Repository │ │ BaseQuery / Mixins │ │
│ │ (可选未来) │ │ (软删除、分页统一处理) │ │
│ └──────────────┘ └──────────────────────────┘ │
└─────────┬────────────────────────────────────────┘
│
┌─────────▼────────────────────────────────────────┐
│ 数据库层 │
│ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ MySQL │ │ SQLite(开发环境) │ │
│ │ (生产) │ │ │ │
│ └──────────────┘ └──────────────────────────┘ │
└──────────────────────────────────────────────────┘
```
### 2.2 架构演进路线
| 阶段 | 架构形态 | 说明 |
|------|----------|------|
| V1.0(当前)| 单体架构 | FastAPI 单体,SQLAlchemy ORM,sqlite/MySQL 双适配 |
| V2.0(规划)| 模块拆分 | 学生、成绩、就业等模块独立 Service 层,便于测试和复用 |
| V3.0(规划)| 微服务化 | 按业务域拆分独立服务,引入消息队列、服务注册发现 |
---
## 3. 模块设计
### 3.1 模块划分
```
student_manage_system/
├── main.py # 应用入口,lifespan 管理
├── database.py # DB 连接与 Session 工厂
├── models.py # SQLAlchemy ORM 模型
├── schemas.py # Pydantic 请求/响应 Schema
├── seed.py # 数据初始化脚本
├── routers/ # API 路由层
│ ├── __init__.py
│ ├── teachers.py # 教师管理模块
│ ├── classes.py # 班级管理模块
│ ├── students.py # 学生管理模块
│ ├── scores.py # 成绩管理模块
│ ├── employment.py # 就业管理模块
│ └── stats.py # 统计分析模块
├── static/ # 静态前端
│ └── index.html
├── docs/ # 项目文档
├── pyproject.toml # 项目依赖配置
└── uv.lock # 依赖锁定文件
```
### 3.2 模块职责矩阵
| 模块 | 路径 | 核心职责 | HTTP 前缀 |
|------|------|----------|-----------|
| 教师管理 | routers/teachers.py | 教师 CRUD | /api/teachers |
| 班级管理 | routers/classes.py | 班级 CRUD,关联教师分配 | /api/classes |
| 学生管理 | routers/students.py | 学生 CRUD,关联班级/顾问 | /api/students |
| 成绩管理 | routers/scores.py | 成绩录入、修改、软删除 | /api/scores |
| 就业管理 | routers/employment.py | 就业信息 CRUD | /api/employments |
| 统计分析 | routers/stats.py | 班级/成绩/就业维度统计 | /api/stats |
---
## 4. 技术选型说明
### 4.1 后端框架:FastAPI
- 原生异步支持,适合 IO 密集型场景
- 自动 OpenAPI 文档生成(`/docs`、`/redoc`)
- Pydantic 内置数据校验,减少样板代码
- 依赖注入(`Depends`)支持 Session 管理和鉴权扩展
### 4.2 ORM:SQLAlchemy 2.0
- 声明式模型,支持 `Mapped` / `Column` 新风格
- 与 PyMySQL 驱动无缝集成
- 软删除模式通过基类 `BaseModel` 统一实现
### 4.3 数据库驱动
| 环境 | 驱动 | 连接方式 |
|------|------|----------|
| 开发 | pymysql(SQLite 直连)| 文件数据库,无需部署 |
| 生产 | pymysql | MySQL 8.0+ / PostgreSQL 14+ |
### 4.4 包管理:uv
- 比 pip 快 10-100x 的 Python 包管理器
- 统一的锁文件管理(`uv.lock`)
- `uv sync` 确保多环境一致
---
## 5. 接口设计规范
### 5.1 RESTful 风格
- 资源使用名词复数:`/api/students`
- 统一路径前缀:`/api/<resource>`
- 软删除代替硬删除,返回语义一致的响应码
### 5.2 统一响应格式
| 操作 | HTTP 方法 | 成功状态码 | 失败典型状态码 |
|------|-----------|------------|----------------|
| 列表查询 | GET | 200 | 400(参数错误) |
| 详情查询 | GET /{id} | 200 | 404(不存在) |
| 创建 | POST | 201 | 400(重复/校验失败) |
| 更新 | PUT /{id} | 200 | 404 / 400 |
| 删除 | DELETE /{id} | 200 | 404 |
### 5.3 分页规范
所有列表接口统一支持:
- `skip`(偏移量,默认 0)
- `limit`(页大小,默认 100)
---
## 6. 中间件设计
### 6.1 当前中间件
```python
# CORS 中间件(开发环境全放行,生产需收紧)
CORSMiddleware(
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
```
### 6.2 待补充中间件(V2.0 规划)
- **认证鉴权中间件**:基于 OAuth2 + JWT 的请求拦截
- **请求日志中间件**:统一记录请求耗时、状态码、IP
- **限流中间件**:防止单接口高频调用
---
## 7. 部署架构
### 7.1 开发环境
```
本地开发机
├── uv run uvicorn main:app --reload
├── SQLite(本地文件 sms.db)
└── 浏览器访问 http://localhost:8000
```
### 7.2 生产环境(推荐)
```
┌─────────────┐
│ Nginx │ ← 反向代理 + HTTPS 终止
│ (port 443) │
└──────┬──────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ FastAPI │ │ FastAPI │ │ FastAPI │ ← 水平扩展(多实例)
│ :8000 │ │ :8001 │ │ :8002 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
└─────────────┼─────────────┘
▼
┌────────────────┐
│ MySQL 集群 │ ← 主从复制 / 云数据库
│ (port 3306) │
└────────────────┘
```
### 7.3 容器化部署(Docker)
```dockerfile
FROM python:3.13-slim
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]
```
---
## 8. 安全设计
| 层次 | 措施 | 当前状态 |
|------|------|----------|
| 传输层 | HTTPS(生产) | 规划中 |
| 应用层 | Pydantic 数据校验 | ✅ 已实现 |
| 应用层 | 软删除防止数据误删 | ✅ 已实现 |
| 认证层 | JWT Token | 规划中 |
| 授权层 | RBAC 角色权限 | 规划中 |
| 注入防护 | SQLAlchemy 参数化查询 | ✅ 已实现 |
---
## 9. 可扩展性设计
### 9.1 当前已预留扩展点
- `lifespan` 钩子:启动时自动建表和种子数据,后续可扩展为迁移工具(Alembic)
- 路由模块化:各业务模块独立文件,便于拆分微服务
- `BaseModel` 基类:所有模型共享审计字段,后续可加分布式 ID
### 9.2 未来演进方向
1. **多租户支持**:在 `BaseModel` 中加入 `tenant_id` 字段
2. **缓存层**:Redis 缓存统计结果,减轻数据库压力
3. **异步任务**:Celery / APScheduler 处理离线统计和报告生成
4. **事件驱动**:学生/成绩变更时发布事件,供下游系统消费