Django到底是MVC还是MVT?以及MVC和MVT的区别

最近一直被一些问题所困惑:Django是遵循MVC还是MVT?MVC和MVT到底有哪些区别?MVC可以继续拆分吗?
在网络上浏览了很多无关痛痒的文章,无非是M、V、C分别代表什么,M、V、T又分别代表什么,这些表层的解释对程序员来说非但不会解决问题,反而还会增加困惑。所以,在查了一些资料之后,在个人理解的基础上,进行总结,记住,这只是个人观点和立场。

MVC是怎么来的?是什么?

最开始MVC是一种思想,全拼为Model-View-Controller,它核心思想是:分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。
后来,这种分工的思想受到越来越多开发者的欢迎,被广泛应用于软件工程中,成为一种软件架构模式(如果你将它理解成一种软件设计模式,我总感觉是有些牵强的)。

框架和设计模式的区别
  1. 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上它们完全是不同的概念。
  2. 框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。
  3. 框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
  4. 框架模式有哪些?
    MVC、MTV、MVP、CBD、ORM等等;
  5. 框架有哪些?
    C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等
  6. 设计模式有哪些?
    工厂模式、适配器模式、策略模式等等
  7. 简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。

最后,MVC的思想被应用在了Web开发方面,被称为Web MVC框架。

MVC的内容:
  • M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
  • V全拼为View,用于封装结果,生成页面展示的html内容。
  • C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

那Django的框架模式是MVC还是MVT?

MVT的内容:
  • M全拼为Model,负责和数据库交互,进行数据处理。
  • V全拼为View,接收请求,进行业务处理,返回应答。
  • T全拼为Template,负责封装构造要返回的html。
提起注意!!!

很多文章说,MVT中的V就是MVC中的C控制器(controller),这种说法是错误的,在Django中MVT中的V仍然只是view,并不是控制器。
MVT将MVC中控制器(controller)的功能进行了拆分,也就是说MVT在Model、View、Template三层之外,还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template。

url分发器处理过程: Django框架接收了用户请求和参数后,再通过正则表达式匹配URL,转发给对应View进行处理。View调用M处理数据,再调用T返回界面给浏览器。

用一张图来看一下MVT和url分发器的关系:

在这里插入图片描述
这种架构模式的优势在于,控制器接受用户输入的部分由框架自行处理,django更加关注的是模型(model)、view(视图)、templates(模版),各种组件都是松耦合的,每个由 Django驱动的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。

我的结论

Django肯定是遵循MVC思想的,但是在具体实现上,Django是MVT框架模式;而且可以说MVT与Django是紧密不可分的,也正是Django对MVT架构模式的使用,导致了我们的困惑。

“What the heck is MVC? groan. Guess that’s one more fricking thing I have to learn!”
“MVC到底是什么?抱怨。我想这是我必须学习的又一件无聊的事情!“

no, you don’t have to learn about MVC because it’s more than likely going to confuse you and lead to more questions than answers
不,你不必学习MVC,因为它很可能会让你困惑,导致更多的问题而不是答案。

参考文献:The django Book

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值