mirror of
http://47.106.207.27:3000/Jeremy_liu/AI0814_jiaoan_public.git
synced 2026-09-27 05:14:14 +08:00
3.4 KiB
3.4 KiB
09 思考内容:从单文件到项目结构
前 8 个文件的学习路线是:
- 先理解 Python = 算法 + 数据。
- 再用列表和字典完成学生增删改查。
- 再用函数拆分逻辑。
- 再用类组织数据和行为。
- 再用反射简化菜单分发。
- 再用 JSON 文件实现持久化。
- 再连接 MySQL 数据库。
- 最后用 SQLAlchemy ORM 把表映射成对象。
一、为什么要划分文件夹?
单文件适合教学入门,因为学生能在一个文件里看到所有逻辑。
但项目变大后,单文件会出现几个问题:
- 代码太长,不容易阅读。
- 数据模型、业务逻辑、界面输入输出混在一起。
- 学生功能、老师功能、课程功能放在一起会互相影响。
- 修改一个功能时,很容易误改其他功能。
所以项目变大后,要开始划分模块。
二、常见目录划分
可以按 MVC 思想划分:
project/
main.py
models/
student.py
teacher.py
course.py
controllers/
student_controller.py
teacher_controller.py
course_controller.py
views/
cli_view.py
repositories/
student_repository.py
teacher_repository.py
course_repository.py
data/
students.json
teachers.json
courses.json
每一层的职责:
- model:定义数据长什么样,比如 Student、Teacher、Course。
- repository:负责数据保存和读取,比如保存到 JSON、MySQL。
- controller:负责业务流程,比如添加学生、删除学生。
- view:负责和用户交互,比如 input 和 print。
- main:程序入口,只负责启动程序。
三、如果增加老师管理,怎么做?
老师和学生本质一样,都是一种数据资源。
老师的数据可以设计为:
teacher = {
"id": 1,
"name": "王老师",
"subject": "Python",
"phone": "13800000000",
}
老师也需要增删改查:
- add_teacher
- list_teachers
- search_teacher
- update_teacher
- delete_teacher
如果使用 MVC,可以新增:
models/teacher.py
controllers/teacher_controller.py
repositories/teacher_repository.py
四、如果增加课程管理,怎么做?
课程的数据可以设计为:
course = {
"id": 1,
"name": "Python 基础",
"teacher_id": 1,
"classroom": "A101",
}
课程的难点是它和老师、学生会产生关系:
- 一个老师可以教多门课程。
- 一个课程可以有多个学生。
- 一个学生也可以选择多门课程。
所以课程管理除了增删改查,还可以继续扩展:
- 给课程分配老师。
- 给课程添加学生。
- 查看某个老师负责的课程。
- 查看某个学生选择的课程。
五、课堂思考题
- 为什么列表适合保存多个学生?
- 为什么一个学生适合用字典或类表示?
- 函数版本比纯列表版本好在哪里?
- 类版本中,Student 和 StudentManager 的职责有什么区别?
- 反射版本为什么可以减少 if/elif?
- JSON 持久化和数据库持久化有什么区别?
- ORM 为什么可以让我们少写 SQL?
- 如果新增老师管理,你会复制学生管理代码,还是抽取公共代码?
- 学生、老师、课程之间的关系如何用数据库表表示?
- MVC 中,input 和 print 应该放在哪一层?