MVC 简介学习笔记

什么是MVC?

MVC是一种软件架构模式,它将一个应用程序分成三个核心部分:Model(模型)、View(视图)和Controller(控制器)。这种模式有助于实现分离关注点的目标,从而提高应用程序的可维护性、可扩展性和可测试性。

MVC 的三个核心部分

Model(模型)

模型是应用程序的核心部分,它负责管理应用程序的数据和业务逻辑。在MVC模式中,模型通常由类或对象表示,它们可以直接与数据库交互,并处理来自控制器的请求。模型还负责通知相关观察者数据发生了变化。

View(视图)

视图是用户界面的可视化部分,它负责显示数据给用户并接受用户输入。在MVC模式中,视图通常由HTML、CSS和JavaScript组成。视图不包含业务逻辑,它只负责显示来自控制器或模型的数据。

Controller(控制器)

控制器负责接收来自用户的请求并处理它们。在MVC模式中,控制器通常由类或对象表示,它们与视图和模型进行交互以完成请求。控制器还负责更新视图和模型以反映数据的变化。

MVC 的优点

使用MVC有以下几个优点:

  1. 分离关注点。按照MVC模式组织代码,可以使应用程序的数据、业务逻辑和用户界面分别定义在三个不同的部分中,避免它们之间出现混淆和耦合。

  2. 可维护性。由于MVC模式有助于将代码分层,因此更容易进行单元测试和重构。开发人员可以更容易地修改或替换某个部分,而不必担心影响其他部分。

  3. 可扩展性。MVC模式是松耦合的,因此更容易对应用程序进行扩展,例如添加新的视图或控制器。

示例

下面是一个使用MVC模式构建的简单Web应用程序,该应用程序允许学生注册并查询成绩:

Model

pythonCopy Code
class Student: def __init__(self, name, id, grade): self._name = name self._id = id self._grade = grade def get_name(self): return self._name def get_id(self): return self._id def get_grade(self): return self._grade class GradeBook: def __init__(self): self._students = [] def add_student(self, student): self._students.append(student) def get_student(self, id): for student in self._students: if student.get_id() == id: return student return None

View

htmlCopy Code
<!DOCTYPE html> <html> <head> <title>GradeBook</title> </head> <body> <h1>GradeBook</h1> <form action="/gradebook" method="post"> <label for="name">Name:</label> <input type="text" id="name" name="name"><br> <label for="id">ID:</label> <input type="text" id="id" name="id"><br> <label for="grade">Grade:</label> <input type="text" id="grade" name="grade"><br> <input type="submit" value="Submit"> </form> <h2>Students</h2> <ul> {% for student in students %} <li>{{ student.get_name() }} ({{ student.get_id() }}): {{ student.get_grade() }}</li> {% endfor %} </ul> </body> </html>

Controller

pythonCopy Code
from flask import Flask, request, render_template import models app = Flask(__name__) gradebook = models.GradeBook() @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': name = request.form['name'] id = request.form['id'] grade = request.form['grade'] student = models.Student(name, id, grade) gradebook.add_student(student) students = gradebook.get_students() return render_template('index.html', students=students) if __name__ == '__main__': app.run()