前端框架之MVC、MVP、MVVM

摘要:
为了将业务和视图的实现代码分离,目前比较流行三种前端架构:MVC=Model-View-ControllerMVP=Model-View-PresenterMVVM=Model-View-ViewModelModel为模型层,主要管理业务模型的数据和行为;View为展示层,其职责就是管理用户界面。MVP和MVVM都是为了解决界面和数据的分离问题,两者只是采用了不同的实现方案。
一、MVC、MVP、MVVC

复杂的软件必须有清晰合理的架构,否则无法开发和维护。为了将业务和视图的实现代码分离,目前比较流行三种前端架构:

MVC = Model-View-Controller

MVP = Model-View-Presenter

MVVM = Model-View-ViewModel

Model 为模型层,主要管理业务模型的数据和行为;

View 为展示层,其职责就是管理用户界面。

三个架构模式目的都是为了解耦 Model 和 View,主要不同点就在于三者实现解耦的方案不同。

二、MVC

MVC = Model-View-Controller,

  • 视图(View):用户界面。
  • 控制器(Controller):业务逻辑
  • 模型(Model):数据保存

各部分之间的通信方式如下

前端框架之MVC、MVP、MVVM第1张

View会接收用户的交互请求并展示数据信息给用户。在 MVC 里,View 被设计为可嵌套的,使用了组合(Composite)模式来实现。比如,列表视图(ListView)或表格视图(TableView)由每个 Item 组成,每个 Item 又可以由图片、文本、按钮等组成。View 是倾向于可复用的,因此,在实际应用中,倾向于将 View 开发成相对通用的组件。

Controller 层主要担任 Model 与 View 之间的桥梁,用于控制程序的流程。Controller 负责确保 View 可以访问到需要显示的 Model 对象数据,并充当 View 了解 Model 更改的渠道。View 接收到用户的交互请求之后,会将请求转发给 Controller,Controller 解析用户的请求之后,数据就会交给对应的 Model。

Model在前端框架中就是数据的存储。在传统后端开发中习惯把业务层归入Model,而对前端框架来说,通常不这样划分。

三、MVP

MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。

前端框架之MVC、MVP、MVVM第2张

MVP有以下三个特点:

1. 各部分之间的通信,都是双向的。

2. View 与 Model 不发生联系,都通过 Presenter 传递。

3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

四、MVVM

MVVM 模式将 Presenter 改名为 ViewModel,MVP 很相似,最大的不同在于 View 和 ViewModel 之间主要是通过数据绑定的方案来实现交互的。

前端框架之MVC、MVP、MVVM第3张

MVVM采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。AngularJS和 Vue都采用这种模式,而React采用了单向数据流,属于MVP架构。  

要实现数据绑定,通常都采用发布者-订阅者模式进行实现,但这部分工作如果由开发人员自己来写代码实现,其实还是挺复杂的,因此,各大平台都提供了各自的内部实现。比如 Vue 和 AngularJS 自身都实现了数据绑定,Android 目前最主流的方案就是采用 Jetpack,iOS 最常用的方案则是结合 ReactiveCocoa(RAC)实现。

MVP 和 MVVM 都是为了解决界面和数据的分离问题,两者只是采用了不同的实现方案。MVP 之间的交互主要是通过接口实现的,其主要弊端就是需要编写大量接口。而 MVVM 则是通过数据绑定的方式实现交互,虽然其实现需要依赖具体的一些框架工具,但明显大大减少了开发者需要编写的代码量。

免责声明:文章转载自《前端框架之MVC、MVP、MVVM》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Visual Studio 2012设置Jquery/Javascript智能提示免费开源3D模型设计软件汇总下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网页兼容性测试(工具使用IETESTER、Firefox、360安全浏览器)

网页兼容性测试主要是针对不同的浏览器进行的测试。由于用户浏览器的不同,往往都会使我们的网页发生页面样式错乱,图片无法显示等问题。对于前端开发工程师来说,确保代码在各种主流浏览器的各个版本中都能正常显示,因此要对编写出来的网页进行兼容性测试 点击【IETester】图标打开一个窗口,这个窗口跟浏览器类似。创建的浏览器页面默认展示的是IETester Ho...

WPF(MVVM) 利用资源字典实现中英文动态切换

1、首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面。 2、将两个资源字典添加到App.xaml中,这里注意下,因为两个字典中有同样字符,如果没有动态更改,默认后添加的生效 <ResourceDictionary Source="/Resourcedictionariesen-us.xaml"/&g...

最全前端资源汇集

前些日子从@张鑫旭微博处得一份推荐 (Front-end-tutorial),号称 最全的资源教程 -前端涉及的所有知识体系;有粗略查看,果然“叹为观止”,至少比想象中涉猎丰富许多;果断有Fork了来:Front-end-tutorial;本就有收藏&分享欲,这种事儿早期也想做了,勘叹见识未广而深;幸遇这良心收集,得以借他人之酒杯,一浇我心之夙愿块...

Java程序员必备后台前端框架--Layui【从入门到实战】(二)

layui使用 导航菜单、选项卡 作者 : Stanley 罗昊 【转载请注明出处和署名,谢谢!】 【编程工具:IDEA】 导航菜单 在layui官网中示例中,我们可以找到关于导航的例子:  我们点击查看代码,将其代码复制到自己的编辑器上; 1 <fieldset class="layui-elem-field layui-field-title...

GULP的使用流程

GULP的使用流程 Gulp 是基于node.js的一个前端自动化构建工具,开发这可以使用它构建自动化工作流程(前端集成开发环境)。使用gulp你可以简化工作量,让你把重点放在功能的开发上,从而提高你的开发效率和工作质量。 一、建好一个文件夹 $ cd 路径 二、文件夹初始化 $ cnpm init 生成了一个package.json 放置,我们当前...

前端人员如何模拟慢网速环境

出于工作需要,有时候需要模拟用户的慢网速对产品做进一步测试&优化,目前有三个软件可以模拟慢网速:Fiddler,NetLimiter,Network Delay Simulator。应该还有更多好用的软件尚待发掘。 Fiddler免 费软件。模拟网速功能比较单一(Rules --> Performance --> Simulate M...