mvc设计模式详解
·
"""
MVC核心概念:
Model(模型):
核心职责:处理数据逻辑(存储、计算、校验),不关心界面--类似:后厨(处理食材 / 做菜)
View(视图):
核心职责:负责展示数据、接收用户输入,不处理业务逻辑--类似:服务员(展示菜品 / 传需求)
Controller(控制器):
核心职责:连接 Model 和 View,处理业务逻辑、协调两者交互--类似:店长(接收需求→安排后厨→反馈结果)
"""
"""
案例一:学生信息管理系统
用一个极简的学生信息查询 / 添加功能,实现 MVC 模式,让你直观看到各模块的分工。
"""
# ---------------------- 1. Model(模型):处理数据逻辑 ----------------------
class StudentModel:
def __init__(self):
# 模拟数据库:存储学生数据
self.students = {"001": "张三", "002": "李四"}
# 查询:获取学生信息
def get_student(self, student_id):
return self.students.get(student_id, "学生不存在")
# 增加:添加学生信息(带简单校验)
def add_student(self, student_id, name):
if not student_id or not name:
return "ID/姓名不能为空"
if student_id in self.students:
return "该学生ID已存在"
self.students[student_id] = name
return "添加成功"
# ---------------------- 2. View(视图):负责展示和输入 ----------------------
class StudentView:
# 展示提示信息
def show_message(self, message):
print(f"\n【提示】:{message}")
# 展示学生信息
def show_student(self, student_id, name):
print(f"\n【查询结果】:ID={student_id},姓名={name}")
# 获取用户输入(封装输入逻辑)
def get_input(self, prompt):
return input(prompt).strip()
# ---------------------- 3. Controller(控制器):协调交互 ----------------------
class StudentController:
def __init__(self):
self.model = StudentModel()
self.view = StudentView()
# 处理“查询学生”的业务逻辑
def handle_query_student(self):
# 1.从视图获取输入学生id
student_id = self.view.get_input("请输入学生id:")
# 2.调用模型处理数据,进行查询
name = self.model.get_student(student_id)
# 3.调用视图展示结果
self.view.show_student(student_id, name)
# 处理“添加学生”的业务逻辑
def handle_add_student(self):
# 1. 从视图获取用户输入
student_id = self.view.get_input("请输入新学生ID:")
name = self.view.get_input("请输入新学生姓名:")
# 2. 调用模型处理数据
result = self.model.add_student(student_id, name)
# 3. 调用视图展示结果
self.view.show_message(result)
# ---------------------- 4. 程序入口:调用控制器 ----------------------
if __name__ == '__main__':
controller = StudentController()
# 模拟用户操作
print("=== 学生信息管理系统 ===")
controller.handle_query_student() # 查询学生
controller.handle_add_student() # 添加学生
controller.handle_query_student() # 再次查询验证
"""
核心分工解析
Model:只关心数据(students 字典),提供 get/add 方法,完全不涉及 “怎么展示”“怎么获取输入”;
View:只做两件事 —— 打印信息(show_* 方法)、获取输入(get_input 方法),没有任何业务逻辑;
Controller:是 “中间人”—— 从 View 拿输入 → 传给 Model 处理 → 把 Model 的结果交给 View 展示,自己只协调流程,不存数据、不做展示。
MVC 模式的优势(为什么要这么设计?)
解耦易维护:比如想把 “控制台视图” 改成 “网页视图”,只需修改 StudentView 类,Model 和 Controller 完全不用动;
代码复用:Model 的数据逻辑可以被多个 View 复用(比如同时支持控制台、网页、APP 展示);
职责清晰:调试时定位问题更快 —— 数据错了查 Model,展示错了查 View,流程错了查 Controller。
总结
MVC 核心是三分工:Model 管数据、View 管展示、Controller 管协调,三者独立解耦;
控制器是核心枢纽,所有交互都通过它完成,避免 Model 和 View 直接通信;
案例中,修改视图(比如改成 GUI 界面)或修改数据存储(比如用数据库替代字典),都只需改对应模块,不影响其他部分。
"""
更多推荐



所有评论(0)