博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC学习笔记
阅读量:6262 次
发布时间:2019-06-22

本文共 1187 字,大约阅读时间需要 3 分钟。

学习Flask的过程中,有一个一直困扰我的问题,即其设计模式是否为MVC?

之所以有这个困扰,因为首先我看的两本书,《Flask Web开发:基于Python的Web应用开发实战》和《Python Web开发实战》,都没有相关章节

但在不少相关开发/技术支持的招聘信息里,确要求对其要理解掌握
在实践过程中,我一度也以为自己理解了model和view的概念(当时以为就是对应models.py和views.py),但找不到controller所对用的对象,于是花了大概半个下午查阅了一些文档,在此,我也以自问自答的形式,把找到的资料也心得罗列一下

MVC是什么?

从或中可以了解到,MVC是一个软件工程中的设计模式,除了MVC之外,还有MVP和MVVM等模式

这里我没有思考到客户端和服务端的区别,也给一开始理解给挖了坑
这个坑,在最后一个答案里提到的文章中有解答:

  • "服务端接收到来自客户端的请求,服务端通过路由规则把这个请求交由给特定的Controller进行处理,Controller执行相应的应用逻辑,对Model进行操作,Model执行业务逻辑以后;然后用数据去渲染特定的模版,返回给客户端。
    因为HTTP协议是单工协议并且是无状态的,服务器无法直接给客户端推送数据。除非客户端再次发起请求,否则服务器端的Model的变更就无法告知客户端。所以可以看到经典的Smalltalk-80 MVC中Model通过观察者模式告知View更新这一环被无情地打破,不能称为严格的MVC"

Flask,其默认采用MVC吗?

我一开始找不到好的文章能回答这个问题,所以就去了解了下Django的默认设计模式

看到有两种说法,分别是MVC和MTV,在查阅更多文章后,发现其实两者是一回事儿,官方都在FAQ中
OK,那么再对比一下Django和Flask(的默认设计模式)就可以知道答案了
对比后,答案是否定的,因为Flask可以采用MVC,也可以不用(比如7行代码实现Hello World网页,根本就没有Model)
另外,在《Flask Web开发:基于Python的Web应用开发实战》这本书里,是采用了MVC进行教学的

MVC及其衍生的各类设计模式的定义和优缺点是什么?

很幸运地,我在里找到了大部分解答,这里不再复述

其中MVC Model 2的部分,令人茅塞顿开

“服务端接收到来自客户端的请求,服务端通过路由规则把这个请求交由给特定的Controller进行处理,Controller执行相应的应用逻辑,...”
结合刚才官方FAQ里的"Django appears to be a MVC framework, but you call the Controller the “view”,..."
可以看到,把那些个views.py理解成controller就对了

转载地址:http://tshsa.baihongyu.com/

你可能感兴趣的文章
windows系统自带命令查看硬件信息,怎样dos命令查看硬盘和内存/CPU信息
查看>>
Nginx基础应用--------基于CentOS6源码安装
查看>>
流媒体服务器之nginx的rtmp模块
查看>>
AChartEngine中属性XYMultipleSeriesRenderer和XYSeriesRender属性详解
查看>>
免费的上网行为管理系统和软路由系统推荐。
查看>>
dovecot+mysql
查看>>
c#短信接口代码实现(发短信)
查看>>
nginx hello world模块编译运行的问题
查看>>
磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!
查看>>
对症下药 避免显示器偏离色彩“正轨”
查看>>
MySQL权限经验原则
查看>>
apache下实现301永久性重定向的方法
查看>>
fir.im 持续集成技术实践
查看>>
windows快捷键使用
查看>>
Java 字符串处理
查看>>
安装nginx服务实战
查看>>
Python基础语法
查看>>
Net Standard扩展支持实例分享
查看>>
Xen虚拟机安装
查看>>
Varnish配置应用
查看>>