【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博客

相关推荐
AI人工智能+电脑小能手32 分钟前
大白话说Java设计模式-28-模板方法模式(业务实战篇)
java·设计模式·模板方法模式·spring源码·订单系统·代码复用
leeyi4 小时前
两个 Agent 怎么协作:Host-Worker 模式(第91篇-E77)
设计模式·agent·ai编程
AI人工智能+电脑小能手21 小时前
大白话说Java设计模式-26-策略模式(业务实战篇)
java·spring·设计模式·策略模式·支付系统·算法切换
星火10241 天前
【Groovy翻译-进阶篇】Groovy 中的设计模式
后端·设计模式·groovy
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-27-策略模式(源码剖析篇)
java·spring·设计模式·策略模式·源码分析·事务管理·comparator
SL_staff1 天前
风控规则如何从硬编码解耦?我们在 JVS-Rules 中的实践与思考
java·spring boot·设计模式
小此方1 天前
Linux加餐(一):藏在Linux中的设计模式(一)策略模式与日志
linux·设计模式·策略模式
To_OC2 天前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
东方小月2 天前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
程序员贺加贝2 天前
轻制造SaaS的生产闭环建模-BOM工单领料报工质检与入库
java·设计模式·架构