谈谈对MVC、MVP和MVVM的理解
刚出来工作的时候维护过一个老系统,该系统是用微软的ASP(Active Server Pages 动态服务器页面)写的。每一个页面都是一个ASP文件,每一个一个ASP文件中又同时包含了HTML、CSS、Java Script、VB Script代码,把这么多代码糅合在一起,可以想象一下如果一个这样的页面包含复杂的业务逻辑,每当要对系统进行维护或增加新功能的时候那个酸爽~
像上面这种把界面、业务逻辑和数据模型都整合在一起的做法,从软件的设计和可维护性方面看都是极不可取的。为了解决上述问题就发展出了各种MV*框架模式(MV*理论本身是一种模式,但它的各种实现又叫MV*框架),它是通过解决M和V的耦合问题来实现界面分离。
- MVC:Model-View-Controller
- MVP:Model-View-Presenter
- MVVM:Model-View-ViewModel
总结:可以从上面的全称可以看出无论MVC、MVP和MVVM都是围绕着Model和View,都是为了解决Model和View的耦合问题,只是实现的思想不一样而已。
MVC
MVC把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),关系如下图所示:
模型(Model):数据库相关的操作、文件的访问和数据结构等。
视图(View):专注于显示,如Web前端(HTML/CSS/Java Script)
控制器(Controller):连接模型和视图,如把视图的请求发送给模型或把数据返回给视图等
MVC只是一种框架模式,针对不同的平台环境的实现方式会有些区别:
Web MVC
经典的Web MVC模式,实现的框架有ASP.Net MVC/Spring MVC 等,在Web MVC中Model的数据通过Controller返回给View。
桌面UI MVC
经典实现有PureMVC,PureMVC 是在基于MVC模式建立的一个轻量级的应用框架。它的Model与View的交互是通过观察者模式实现的,当Model有变化要通知View的时候Model把消息发送给通知分发中心,然后通知分发中心把消息发送到View。
总结:
MVC的实现了视图和模型的分离,避免了视图和模型糅合在一起,当视图改变的时候只要业务逻辑没变不需要改变模型;但是它有一个缺点缺点是因为MVC中的控制器并不能直接更新视图,所以MVC并不能实现视图和模型的完全分离,视图依然依赖模型的数据(数据结构)来显示,也就是说视图依赖模型。
MVP
MVP是针对MVC的缺点而进行了改进,它把软件系统分为三个基本部分:模型(Model)、视图(View)和展示器(Presenter),关系如下图所示:
模型(Model):数据库相关的操作、文件的访问和数据结构等。
视图(View):专注于显示,如Web前端(HTML/CSS/Java Script)
展示器(Presenter):连接模型和视图,处理视图的请求并根据模型更新视图。
总结:
MVP用展示器代替了控制器,而展示器是可以直接更新视图,所以MVP中展示器可以处理视图的请求并递送到模型又可以根据模型的变化更新视图,实现了视图和模型的完全分离。
MVVM
MVVM是MVP更进一步的发展,把软件系统分为三个基本部分:模型(Model)、视图(View)和视图模型(ViewModel),关系如下图所示:
模型(Model):数据库相关的操作、文件的访问和数据结构等。
视图(View):专注于显示,如Web前端(HTML/CSS/Java Script)
视图模型(ViewModel):连接模型和视图,视图模型和视图是双休绑定的。
总结:
MVVM用视图模型代替了MVP中的展示器,视图模型和视图实现了双向绑定,当视图发生变化的时候视图模型也会发生改变,当视图模型变化的时候视图也随之变化。
MVC/MVP/MVVM都是根据不同的应用需求和应用环境逐步发展而来的,它们都有各自优缺点和适用环境。比如Web开发中因为要跨越网络通讯,如果使用MVP或者MVVM来实现代价是巨大的,因为目前来说网络数据很珍贵的资源。
转载请注明出处:http://www.cnblogs.com/keitsi/p/5764785.html
谈谈对MVC、MVP和MVVM的理解的更多相关文章
- MVC MVP 和 MVVM的图示
一直对于这些什么MVC MVP 和 MVVM都是云里雾里的 完全分不清楚 感觉jq上也没怎么用过,理解也很片面,画几张图也许能够大体分清他们之间的区别. 1.MVC(Model-View-Contro ...
- [转载]Android MVC,MVP和MVVM 思想&例子
在Android开发中,常采用 MVC(Model-View-Controller)或者MVP(Model-View-Presenter) 等框架模式.设计如图 mvc mvp 可以看出,在 MV ...
- MVC, MVP, MVVM比较以及区别(下)
上一篇得到大家的关注,非常感谢.一些朋友评论中,希望快点出下一篇.由于自己对于这些模式的理解也是有限,所以这一篇来得迟了一些.对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己 ...
- MVC, MVP, MVVM比较以及区别
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- MVC, MVP, MVVM比较以及区别(上)
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- 【转】对MVC、MVP、MVVM的懂得
[转]对MVC.MVP.MVVM的懂得 转载地址:http://www.myexception.cn/vc-mfc/1612241.html 对MVC.MVP.MVVM的理解 最近看了一堆js框架的文 ...
- js架构设计模式——你对MVC、MVP、MVVM 三种组合模式分别有什么样的理解?
你对MVC.MVP.MVVM 三种组合模式分别有什么样的理解? MVC(Model-View-Controller)MVP(Model-View-Presenter)MVVM(Model-View-V ...
- 理解MVC,MVP和MVVM设计模式
有3个非常受欢迎的MV-*系列设计模式:MVC,MVP,MVVM.他们被广泛应用于不多种结束.这篇文章我回阐述我自己对这3个设计模式的看法. MVC模式: MVC即Model-VIew-Control ...
- mvc、mvp和mvvm理解
MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...
随机推荐
- Spring结合AspectJ的研究
本文阐述以下内容:1.AspectJ是什么及使用方式2.Spring AOP和AspectJ的区别3.Spring结合AspectJ的使用方法和原理4.Spring注解方式使用AspectJ遇到的问题 ...
- 使用Material Design 创建App翻译系列---列表和卡片集的创建
上一篇是使用Material Design 创建App翻译系列--材料主题的使用(Using Material Theme),进入正题: 想要在应用里创建Material Design风格的复杂列表和 ...
- 2013年八月GBin1月刊
2013年八月GBin1月刊 推荐十款来自极客标签的超棒前端特效[第十二期] 本周,我们带来了极客社区推荐的10款前端特效,仍然是非常有趣的小动态效果的页面生成.喜欢的可以直接将我们的在线调试代码插入 ...
- lua coroutine
Lua中协程都放在表coroutine中. Lua协程的四个状态 挂起(suspended):一个协程被创建的时候,处于挂起状态,不会自动运行. 运行(running):coroutine.resum ...
- 11g OCM 考试感悟
11g OCM 考试感悟 PrudentWoo 累,累.真的很累.考前每天全场景的刷两遍.三遍不觉得累.总感觉练习时间不够.考中尽管时间足够.可是压力很大.尤其看到一些和平时训练不一样题目的时候,那种 ...
- axios [æk'si:əʊs] 及 axios 请求配置
特征 比Jquery轻量,但处理请求不多的时候,可以使用 基于Promise语法标准 支持nodejs 自动转换JSON数据 用法 get // Make a request for a user w ...
- Linux下SVN部署/安全及权限配置,实现web同步更新
转自:http://www.cnblogs.com/me115/archive/2013/04/07/3002058.html 本文包含以下内容: SVN服务器安装 SVN权限管理 SVN使用SASL ...
- 【Python 数据分析】从Mysql数据库取出数据作图分析
在之前的文章中[爬取天气信息]我们已经将昆明二月份的气温爬取到数据库了,那么现在我们需要对这些数据进行一些分析操作,下面是使用matplotlib对这些数据的一些操作 折线图 首先我们读取数据库中的数 ...
- DRUPAL性能优化【转】
1.启用memcache代替Mysql的缓存表处理缓存数据. 2.添加一个opcode缓存可以让 PHP能够重用前面编译过的代码,这样就会跳过解析和编译.常见的opcode缓存有Alternative ...
- 【前端】jQuery
一.jQuery是什么? 1.jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多JavaScript高手加入其team 2.jQuery是继prototype之后有一个优秀的 ...