MVC, MVP, MVT, MVVM的区别

看到这篇文章的人,我觉得至少MVC是听过的。但是,当你百度区别,可能有点搞不清楚,那种是MVC,哪种是MVP。因为,MVC从出生到现在,已经经过多次变形,甚至,有人把MVP当成MVC的一种情况,也算MVC。

这篇文章会尽量着重讲清楚为什么需要这些改变

MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写

模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“ Model ”有对数据直接访问的权力,例如对数据库的访问。“

视图(View)能够实现数据有目的的显示(理论上,这不是必需的)。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model)。一般是html,css,js,jsp等

控制器(Controller)起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。

 

你可能见过这种

可能见过这种的

 

 

MVC模式在概念上强调 Model, View, Controller 的分离,各个模块也遵循着由 Controller 来处理消息,Model 掌管数据源,View 负责数据显示的职责分离原则。model跟view是以观察者模式运行的,model更新时会通知view进行更新

 

但是,如果现在有一个需求,需求里的功能都已经实现,但是它要求直接输出,而不是变成显示网页,那么,就比较麻烦了。而且,这种传统MVC,很不方便测试,因为,测试可能要添加一个测试的view来进行测试。因此,MVP诞生了

MVP

MVP跟MVC很像,或者说是MVC的一种,其中P是Presenter。

下面是MVC与MVP的对比图。

可以明显发现,对比MVC,model跟view完全不知道对方的事,他们只跟presenter交流,presenter作为他们的代理出现。这样,方便了前后端的分离。

而现在,也可以直接通过在presenter里添加接口供测试使用了。由于models与views完全分离,当有其他需求时,在presenter添加接口就行了。

缺点也很明显,所有流程都要通过presenter,这会使presenter里的代码越来越长,因此,MVP 设计模式通常会再加上 Controller 做为整体应用程序的后端程序工作。

 

MVT(django)

MVT是python中django框架使用的一种架构模式。M是models,v是views,T是templates。

 

很多人都说MVT跟MVC只是换了个名,但由于MVC模式发展到现在有多种,你说的是哪种哇嘎奶哟。但从上图明显可以看出,MVT更接近于MVP模式,或者说,这两者才应该划上等号。

其中M相当于MVP的M,但MVT的views对应的是presenter,而templates对应的才是MVP的view。

 

MVVM

 

MVVM 模式是MVP的升级模式,只是将 Presenter 改名为 ViewModel,它采用双向绑定(data-binding):包括了一个绑定引擎data-binding-engine,用来规定指定需要绑定的数据。这样,用户对View的变动,自动反映在 ViewModel,对model进行更新,反之对model修改也是。同样的使用了观察者模式,当被观察者改变时,观察者第一时间更新自己,实现绑定

 

参考的一些链接(在印象笔记里,右上角进入原文链接):

https://app.yinxiang.com/shard/s64/nl/20511302/c6dbc306-6b0f-401e-a6d8-2b95cb9ad201/

https://app.yinxiang.com/shard/s64/nl/20511302/cb8bbf95-a090-4b3e-aafd-445cb66dd710/

https://app.yinxiang.com/Home.action#n=af1a2a83-1ec7-441d-9fca-d4ec1e9b8718&s=s64&ses=4&sh=2&sds=5&

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值