Python:设计模式之模型-视图-控制器-MVC复合模式

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: Python:设计模式之模型-视图-控制器-MVC复合模式

复合模式:

将两个或更多个模式组合成解决常见或普遍性问题的解决方案

MVC模式工作机制

模型,提供数据和业务逻辑

视图,负责数据展示

控制器,模型和视图的粘合剂


MVC模式术语

模型:声明一个存储和操作数据的类

视图:声明一个类来构建用户界面和显示数据

控制器:声明一个连接模型和视图的类

客户端:声明一个类,更具某些操作来获得某些结果


MVC模式应用场景

1、当需要更改展示方式而不更改业务逻辑

2、多个控制器可以用于使用多个视图来更改用户界面上的展示

3、再次重申,当模型改变时,视图无需改动,因为它们是相互独立的


MVC详细介绍

1、模型-了解应用程序的情况

模型是应用程序的基石,它独立于视图和控制器,而视图和控制器则依赖于模型


2、视图-外观

视图用来将数据展示到接口上,可以独立开发,但不应该包含任何复杂的逻辑

逻辑应该放在控制器或模型中


3、控制器-胶水

控制器用来控制用户在界面上的交互

控制器不应该进行数据库调用或参与数据展示

控制器应该作为模型和视图之间的粘合剂,并且尽可能薄


MVC模式的优点

1、使用MVC,开发人员可以将软件应用程序分为3个主要部分:模型,视图,控制器

有助于提高可维护性,强制松耦合,并降低复杂度

2、MVC允许对前端视图进行独立更改,而后端逻辑无需任何修改或只需进行很少的更改

因此,开发工作仍然可以独立进行

3、类似地,可以更改模型或业务逻辑,而无需对视图进行任何更改

4、可以更改控制器,而不会对视图或者模型造成任何影响

5、MVC有助于招聘具有特定能力的人员,例如平台工程师和UI工程师,

他们可以在自己的专业领域独立工作


代码示例

# -*- coding: utf-8 -*-


class Model(object):
    def get_data(self):
        data = [
            {
                "name": "Tom",
                "age": 23
             },
            {
                "name": "Jack",
                "age": 21
            },
        ]
        return data


class View(object):
    def show_data(self, data):
        for row in data:
            print(row["name"], row["age"])


class Controller(object):
    def __init__(self):
        self.model = Model()
        self.view = View()

    def interface(self):
        data = self.model.get_data()
        self.view.show_data(data)


if __name__ == '__main__':
    controller = Controller()
    controller.interface()
"""
Tom 23
Jack 21
"""

参考

《Python设计模式第2版》第九章 模型-视图-控制器-复合模式

            </div>
目录
相关文章
|
1天前
|
机器学习/深度学习 存储 TensorFlow
使用Python实现深度学习模型:智能金融风控与信用评估
【7月更文挑战第25天】 使用Python实现深度学习模型:智能金融风控与信用评估
17 3
|
2天前
|
机器学习/深度学习 TensorFlow 数据处理
使用Python实现深度学习模型:医学影像识别与疾病预测
【7月更文挑战第24天】 使用Python实现深度学习模型:医学影像识别与疾病预测
15 4
|
4天前
|
机器学习/深度学习 数据可视化 开发者
视觉的力量!Python 机器学习模型评估,Matplotlib 与 Seaborn 如何助力决策更明智?
【7月更文挑战第23天】在Python机器学习中,模型评估不可或缺。Matplotlib与Seaborn作为数据可视化工具,助力洞察模型性能。Matplotlib基础灵活,构建复杂图表;Seaborn在其上层,简化绘图,提升美观。从折线图追踪损失到条形图对比准确率,两者互补,促进高效决策制定。尽管Matplotlib掌控力强,但Seaborn友好快捷,适于统计图形。结合使用,可将数据转化成深刻见解。
|
2天前
|
机器学习/深度学习 数据采集 自然语言处理
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
【7月更文挑战第25天】在数据驱动的世界中, Scikit-learn作为顶级Python机器学习库,助力挖掘数据价值。本文以垃圾邮件识别为例,展示了其高效模型选择流程:从文本预处理至模型优化。使用TfidfVectorizer转换邮件文本,并通过Pipeline集成MultinomialNB分类器。通过GridSearchCV进行参数调优与交叉验证,评估不同模型(如随机森林)的表现,最终选定最佳模型。Scikit-learn简化了这一复杂过程,使其成为现代数据科学的必备工具。
9 2
|
3天前
|
机器学习/深度学习 搜索推荐 TensorFlow
使用Python实现深度学习模型:用户行为预测与个性化服务
【7月更文挑战第23天】 使用Python实现深度学习模型:用户行为预测与个性化服务
26 3
|
2天前
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
11 4
|
1天前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
6 2
|
2天前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
10 3