设计模式系列之MVC模式

news/2024/4/28 23:06:10/文章来源:https://blog.csdn.net/cy15625010944/article/details/127639015

这里写自定义目录标题

    • 1、设计模式概要
      • 最基本的设计模式
      • 使用设计模式的好处
    • 2、MVC模式
      • MVC实例:
        • 模型 models.py
        • 视图views.py
        • 控制器 Controller.py
      • 3、优缺点总结

1、设计模式概要

定义: 设计模式是由众多的软件开发人员经过长期的积累,不断试错改进,总结出来的最佳解决方案。是软件开发人员解决某类问题的最佳实践,它经常被有经验的软件开发人员在开发过程中所采用。

最基本的设计模式

  • 创建型模式:提供实例化的方法,为适合的状况提供相应的对象创建方法。
  • 结构型模式:通常用来处理实体之间的关系,使得这些实体能够更好地协同工作。
  • 行为型模式:用于在不同的实体建进行通信,为实体之间的通信提供更容易,更灵活的通信方法。

使用设计模式的好处

  • 模式为开发人员提供了针对特定问题的经过尝试和测试的解决方案的选择。
  • 所有设计模式都是与语言无关的
  • 模式有助于实现沟通并维护良好的文档。
  • 它包括成就记录,以减少项目的任何技术风险。
  • 设计模式使用起来非常灵活并且易于理解

2、MVC模式

MVC模式,即模型-视图-控制器模式,也是最常用的设计模式。开发人员发现实现这种设计模式很容易。

MVC设计模式
该模式下由三部分组成
模型model:它由与数据库交互的纯应用程序逻辑组成。它包含了所有可以向最终用户表示数据的信息。
试图views:视图表示与最终用户交互的HTML文件。它向用户表示模型的数据。
控制器 controller : 它充当视图和模型之间的中介。它监听由视图和查询模型触发的事件

MVC实例:

模型 models.py

它需要一个方法,该方法可获取数据库中Person表的所有记录。记录以JSON格式显示。
模型主要包括业务逻辑模块和数据模块,与数据格式无关。可以被多个视图重用

# -*- coding:utf-8 -*- 
# filename: mvc_model设计模式中model
# data: 
import sys
import jsonclass Person(object):'''该方法可获取数据库中Person表的所有记录。记录以JSON格式显示'''def __init__(self,first_name = None,last_name = None):self.first_name = first_nameself.last_name = last_namedef name(self):'''返回人名'''return (" %s %s " %(self.first_name,self.last_name))@classmethod  # 类方法的定义  类名.函数名def getAll(self):'''获取所有的人作为person对象的列表'''database = open(sys.path[0]+ r'\db.txt','r')result = []json_list = json.loads(database.read())for item in json_list:item = json.loads(item)person = Person(item['first_name'],item['last_name'])result.append(person)return result

视图views.py

它显示在模型内获取的所有记录。视图从不与模型交互;控制器完成这项工作(与模型和视图进行通信)

# -*- coding:utf-8 -*- 
# filename: mvc_model设计模式中model
# function :显示在模型内获取的所有记录。视图从不与模型交互;控制器完成这项工作(与模型和视图进行通信)
# data: from models import Persondef showAllView(list):print ('in our db we have %i users. Here they are:' % len(list))for item in list:print (item.name())def startView():print ('MVC - the simplest example')print ('Do you want to see everyone in my db?[y/n]')def endView():print ('Goodbye!')

控制器 Controller.py

Controller通过 getAll()方法与模型进行交互,该方法将获取显示给最终用户的所有记录。
功用:控制器(controller)接收来自界面的请求 并交给模型进行处理

# -*- coding:utf-8 -*- 
# filename: mvc_model设计模式中控制器
# function : 通过 getAll()方法与模型进行交互,该方法将获取显示给最终用户的所有记录。
# data: 2022-11-01from models import Person
import viewsdef showAll():#获取所有的person对象的列表ypeoples = Person.getAll()#调用视图return views.showAllView(peoples)def start():views.startView()inputs = input()if inputs == 'y':return showAll()else:return views.endView()if __name__ == "__main__":#开始运行控制器start()

3、优缺点总结

优点 :

  • 实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。
  • 有利于分工合作。,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可进行开发视图层中的 JSP,而对业务熟悉的人员可开发业务层,而其他开发人员可开发控制层。
  • 有利于组件的重用。如控制层可独立成一个能用的组件,可以为一个模型在运行时同时建立和使用多个视图。

缺点 :

  • 对于简单的界面,增加了系统结构和实现的复杂性。
  • 视图与控制器间的过于紧密的连接。
  • 视图对模型数据的低效率访问
  • 目前,一般高级的界面工具或构造器不支持模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410467.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp老项目添加自动化部署并配置多环境

我司其他项目都是通过jenkins打包部署的,只有uniapp项目要前端通过hbuilderx手动打包上传到git,为了方便操作,改造老项目! 创建一个新的uniapp项目 参考:https://uniapp.dcloud.net.cn/quickstart-cli.html 安装vue…

顺应国家趋势,争做爱国程序员

当今社会,为了不再使我国面临“缺芯”的情况下,先进计算技术逐渐成为我国的发展趋势。 那,何为先进计算? 百度百科的定义为:先进计算包括超级计算、大数据、人工智能、云计算等多种新兴IT信息技术,先进计…

仿iPhone开关按钮switch

前端开发checkbox 单选按钮做开关https://github.com/weatherstar/switchgithub下载 渲染事件方法 defaults { size : ‘default’ , checked : undefined , onText : ‘Y’ , offText : ‘N’ , onSwitchColor : ‘#64BD63’ , offSwitchColor : ‘#fff’ , onJackColor : ‘…

html实现飞机小游戏(源码)

文章目录1.思路讲解1.1 游戏设计1.2 主界面1.3 倒计时进入游戏1.4 游戏效果1.3 游戏结束2.实现源码2.1 游戏动态效果2.2 游戏主代码2.3 源码目录源码下载作者:xcLeigh 文章说明 html实现飞机大战源码,酷炫的界面效果,有四款飞机大战背景&…

2022高频经典前端面试题(es6+webpack+http网络+性能优化中篇,含答案)

ES6篇 1. ES6的新特性?(必考) 参考阮一峰的es6文档:https://es6.ruanyifeng.com/ let、const变量的解构赋值模板字符串(可以直接进行变量拼接)箭头函数… 展开运算符可以将数组或对象里面的值展开;还可以…

面试被问到如何排查JVM问题的,如何回答?

一、首先说可用工具 1、jmap可以查看当前Java进程的内存占用,把内存快照dump出来 用法:jmap [option] <pid> 常用命令jmap -heap pid 主要显示堆的内存使用情况,包括分代情况,每个代的总容量、已使用内存、可使用内存,如图: jmap -dump:live,format=b,file=xxx…

发第一篇SCI有哪些技巧?

正所谓万事开头难&#xff0c;每当第一次做某一件事情总是难以开展的。因为那时我们没有一定的方法和技巧去完成这些事。比如 SCI论文是无数科研人员认可的学术文献&#xff0c;但是想要在SCI期刊上发表论文是十分困难的&#xff0c;因为在论文创作上尚且不成熟&#xff0c;没有…

大学毕业1年,从监工转行软件测试,我拿到了人生第一份8k的offer

大家好&#xff0c;我是小静&#xff0c;是一名IT转行人&#xff0c;2015年毕业于某所XXXX大专&#xff0c;大学学的专业是土木工程&#xff0c;毕业也是不出意外的来到了工地&#xff0c;从事的是一份监工的工作&#xff0c;就是工地上带白帽子的&#xff0c;每个月拿着4000块…

js 之reduce 方法实现数组去重原理分布解析

需求 &#xff1a;当有一个数组对象 我们需要根据数组对象的某个属性进行去重 此时我们用reduce最合适不过 let alin [{id : 001 ,name : 小红},{id : 002 ,name : 小黄},{id : 001 ,name : 小红},]function arrRemoveRepet(arr) {let newArr []; // 去重后得到的新数组con…

生成新冠疫苗接种趋势图-技术和法律学习

生成新冠疫苗接种趋势图-技术和法律学习文档说明:只记录关键地方; 缘由:想看疫苗接种趋势图,我要去哪里找呢?奈何公开的渠道没有找到!自己做一个呗数据来源: http://www.nhc.gov.cn/xcs/xxgzbd/gzbd_index.shtml (信息来自国家卫生健康委员会官方网站) 我要怎么得到数据呢…

靶机20 driftingblues3

描述: __________ 获取标志 难度&#xff1a;简单 1、下载靶场 靶机名称&#xff1a;driftingblues 下载地址&#xff1a; DriftingBlues: 3 ~ VulnHub 2、安装靶场 以DC-1为例&#xff0c;将文件解压&#xff08;一压缩包形式进行下载&#xff09;。 打开虚拟机&#xff0c;选…

K8S二进制部署之定义CA证书与ETCD

文章目录CA证书制作K8S集群证书流程K8S 二进制集群部署K8S二进制部署ETCD集群部署1、docker部署&#xff08;所有节点&#xff09;ETCD集群部署master节点操作小结&#xff1a;查看etcd 启动脚本创建ca证书创建cfssl类型工具下载脚本到node节点修改CA证书 CA证书中包含密钥对 …

浅谈 web3

web3——互联网的未来? web3,很多人觉得是个骗局,是在割韭菜。因为大部分介绍 web3 的文章都离不开 NFT、数字货币、区块链、比特币、以太坊、元宇宙等概念,玄之又玄,脱离我们的生活,没解决我们的痛点。一般文章最后还教给我们怎么炒币,怎么买卖 NFT,妥妥的割韭菜套路,…

顺序结构综合练习

顺序结构综合练习 数学头文件#include<cmath> 幂函数 pow10(x)结果等于10^x pow()函数是cmath标头的库函数,用于查找幂的加数。计算x的y次方 pow()函数语法:pow(x,y); #include<cstdio>// main(){int a,b,c;scanf("%d%d",&a,&b);//格式化…

长时间久坐危害竟然这么大,这4项检查,男性朋友一定要定期查

对于男性而言&#xff0c;生殖系统健康尤为重要&#xff0c;但很多人却并不是那么重视&#xff0c;家住昆山的小王就是其中一员&#xff0c;作为一名程序员的他&#xff0c;上班坐着&#xff0c;上班路上坐着&#xff0c;下班路上也是坐着&#xff0c;回家更是坐着。小伙身体棒…

Bootstrap概述和Bootstrap快速入门

Bootstrap概述 1.概念:一个前端开发的框架,Bootstrap,来自Twitter,是目前很受欢迎的前端框架。Bootstrap是基于HTML、CSS、JavaScript的,它简洁灵活,使用得Web开发更加快捷。框架:一个半成品软件,开发人员可以在框架基础上,在进行开发,简化编码。好处:1.定义了很多的…

css 居中

阅读目录水平居中垂直居中垂直居中: position 绝对定位演示垂直居中: flex 演示垂直居中: transform 演示水平&垂直居中flex 1flex 2position水平居中 1 行内块居中 设置父元素的 text-align: center 2 块级元素 设置当前块级元素(宽度) margin: 0 auto; 3 绝对定位 元素…

【微机接口】中断的基本概念

中断&#xff1a; CPU在执行程序的过程中&#xff0c;由于某种外部或内部事件的作用&#xff0c;使CPU停止当前正在执行的程序转去为该事件服务&#xff0c;待事件服务结束后&#xff0c;又能自动返回到被中止的程序继续执行。 主程序&#xff1a; 被中断的原程…

@DateTimeFormat和@JsonFormat介绍

文章目录1.DateTimeFormat注解1.1DateTimeFormat注解简介1.2DateTimeFormat注解的功能1.3DateTimeFormat注解的注意点1.4DateTimeFormat功能演示1.4.1类型转换异常情况测试1.4.2接收url路径传参格式测试1.4.3接收Form-Data数据格式测试1.4.4接收JSON数据格式测试2.JsonFormat注…

基于协同过滤推荐算法的在线教育平台(Vue+Node.js+SSM)

基于协同过滤推荐算法的在线教育平台&#xff08;前后端分离&#xff09;。 back为后端&#xff0c;front为前端&#xff0c;config-files为相关配置文件 摘要 随着科技的不断变迁&#xff0c;信息技术的不断迭代升级。人们对于互联网方方面面的需求都开始涌现了出来&#xf…