MVC 简介学习笔记
什么是MVC?
MVC是一种软件架构模式,它将一个应用程序分成三个核心部分:Model(模型)、View(视图)和Controller(控制器)。这种模式有助于实现分离关注点的目标,从而提高应用程序的可维护性、可扩展性和可测试性。
MVC 的三个核心部分
Model(模型)
模型是应用程序的核心部分,它负责管理应用程序的数据和业务逻辑。在MVC模式中,模型通常由类或对象表示,它们可以直接与数据库交互,并处理来自控制器的请求。模型还负责通知相关观察者数据发生了变化。
View(视图)
视图是用户界面的可视化部分,它负责显示数据给用户并接受用户输入。在MVC模式中,视图通常由HTML、CSS和JavaScript组成。视图不包含业务逻辑,它只负责显示来自控制器或模型的数据。
Controller(控制器)
控制器负责接收来自用户的请求并处理它们。在MVC模式中,控制器通常由类或对象表示,它们与视图和模型进行交互以完成请求。控制器还负责更新视图和模型以反映数据的变化。
MVC 的优点
使用MVC有以下几个优点:
-
分离关注点。按照MVC模式组织代码,可以使应用程序的数据、业务逻辑和用户界面分别定义在三个不同的部分中,避免它们之间出现混淆和耦合。
-
可维护性。由于MVC模式有助于将代码分层,因此更容易进行单元测试和重构。开发人员可以更容易地修改或替换某个部分,而不必担心影响其他部分。
-
可扩展性。MVC模式是松耦合的,因此更容易对应用程序进行扩展,例如添加新的视图或控制器。
示例
下面是一个使用MVC模式构建的简单Web应用程序,该应用程序允许学生注册并查询成绩:
Model
pythonCopy Codeclass 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 Codefrom 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()