【Python笔记-设计模式】MVC模式

一、说明

它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。每个部分都有不同的责任,协同工作以实现用户界面和应用程序逻辑的分离。

  • 模型(Model):模型负责管理应用程序的数据和业务逻辑。它封装了数据结构和对数据的操作方法,通常与数据库或其他数据存储交互以获取或保存数据。
  • 视图(View):视图负责将模型的数据呈现给用户,通常是用户界面的一部分。视图是模型的抽象表示,它负责将数据格式化为用户可以理解的形式。
  • 控制器(Controller):控制器负责处理用户输入和交互逻辑。它从视图接收用户输入,调用模型中的方法来处理数据,并将处理结果返回给视图以更新用户界面。

(一) 解决问题

将应用程序的数据(模型)、用户界面(视图)和应用程序逻辑(控制器)分离

(二) 使用场景

  • Web应用程序
  • 目前大多Web框架都采用MVC模式,如:Django、Flask、Tornado

二、结构

  1. Model(模型):模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  2. View(视图):视图代表模型包含的数据的可视化。
  3. Controller(控制器):控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

三、伪代码

python 复制代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
MVC模式

例:学生管理系统,实现学生的注册和查询
"""


class StudentModel:
    """模型(Model)"""

    def __init__(self):
        self.students = {}

    def add_student(self, id, name):
        self.students[id] = (id, name)

    def get_student(self, id):
        return self.students.get(id)


class StudentView:
    """视图(View)"""

    def display_student(self, student):
        if student:
            print(f"ID: {student[0]}, 姓名: {student[1]}")
        else:
            print("查无此人")

    def display_all_students(self, students):
        for key, values in students.items():
            print(f"ID: {values[0]}, 姓名: {values[1]}")


class StudentController:
    """控制器(Controller)"""

    def __init__(self):
        self.model = StudentModel()
        self.view = StudentView()

    def add_student(self, id, name):
        self.model.add_student(id, name)

    def get_student(self, id):
        student = self.model.get_student(id)
        self.view.display_student(student)

    def get_all_students(self):
        students = self.model.students
        self.view.display_all_students(students)


if __name__ == "__main__":
    """
        ID: 1, 姓名: 张三
        查无此人
        ID: 1, 姓名: 张三
        ID: 2, 姓名: 李四
    """
    controller = StudentController()
    controller.add_student(1, "张三")
    controller.add_student(2, "李四")

    controller.get_student(1)
    controller.get_student(3)

    controller.get_all_students()

四、优缺点

优点

  • 重用性:由于模型、视图和控制器各自独立,因此可以重用它们来构建不同的应用程序,提高了代码的重用性。
  • 可测试性:每个部分都可以独立进行单元测试,易于测试和调试,提高了代码的质量和可靠性。
  • 易于维护和扩展:由于代码的组织结构清晰,因此易于理解、维护和扩展,即使应用程序变得更复杂也能轻松应对。

缺点

  • 增加复杂性:将应用程序分为模型、视图和控制器三个部分可能会增加一定的复杂性,特别是在小型应用程序中可能显得过于繁琐。

【Python笔记】设计模式-CSDN博客

相关推荐
晨米酱5 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机11 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机12 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机12 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机12 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤12 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机1 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴1 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤1 天前
工厂模式
设计模式