MVC、MVP、MVVM三种区别及适⽤场合
MVC模式最初⽣根于服务器端的Web开发,后来渐渐能够胜任客户端Web开发,能够满⾜其复杂性和丰富性。
MVC:是Model-View-Controller 的缩写,它将应⽤程序划分为三个部分:
1.视图(View):⽤户界⾯,只负责渲染HTML
2.控制器(Controller):业务逻辑,负责调度model和view
3.模型(Model):数据保存,只负责存储数据,请求数据,更新数据
MVC允许在不改变视图的情况下改变视图对⽤户输⼊的响应⽅式,⽤户对view操作交给Controller处理在
mvc的controllerController中响应View的事件调⽤Model的接⼝对数据进⾏操作,⼀旦Model发⽣变化便通知相关View进⾏更新。
接受⽤户指令时,MVC可以分成两种⽅式。⼀种是通过View接受输⼊,传递给Controller。另⼀种是直接通过Controller接受指令。
MVC流程:
MVC流程⼀共有两种,在⽇常开发中都会使⽤到。
⼀种是通过 View 接受指令,传递给 Controller,然后对模型进⾏修改或者查底层数据,最后把改动渲染在视图上。
另⼀种是通过controller接受指令,传给Controller:
在MVC中,View会直接从Model中读取数据⽽不是通过 Controller。
MVC优点:
1.耦合性低,视图层和业务层分离,这样就允许更改视图层代码⽽不⽤重新编译模型和控制器代码。
2.重⽤性⾼
3.⽣命周期成本低
4.MVC使开发和维护⽤户接⼝的技术含量降低
5.可维护性⾼,分离视图层和业务逻辑层也使得WEB应⽤更易于维护和修改
6.部署快
MVC缺点:
不适合⼩型,中等规模的应⽤程序,花费⼤量时间将MVC应⽤到规模并不是很⼤的应⽤程序通常会得不偿失。
视图与控制器间过于紧密连接,视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应⽤是很有限的,反之亦然,这样就妨碍了他们的独⽴重⽤。
视图对模型数据的低效率访问,依据模型操作接⼝的不同,视图可能需要多次调⽤才能获得⾜够的显⽰数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
MVC应⽤:在web app 流⾏之初, MVC 就应⽤在了java(struts2)和C#(ASP.NET)服务端应⽤中,后来在客户端应⽤程序中,基于MVC模式,AngularJS应运⽽⽣。
MVP:(Model-View-Presenter)是MVC的改良模式,由IBM的⼦公司Taligent提出。和MVC的相同之处在于:Controller/Presenter负责业务逻辑,Model管理数据,View负责显⽰只不过是将 Controller 改名为 Presenter,同时改变了通信⽅向。
MVP特点:
M、V、P之间双向通信。
View 与 Model 不通信,都通过 Presenter 传递。Presenter完全把Model和View进⾏了分离,主要的程序逻辑在Presenter⾥实现。
View ⾮常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,⽽ Presenter⾮常厚,所有逻辑都部署在那⾥。
Presenter与具体的View是没有直接关联的,⽽是通过定义好的接⼝进⾏交互,从⽽使得在变更View时候可以保持Presenter的不变,这样就可以重⽤。不仅如此,还可以编写测试⽤的View,模拟⽤户的各种操作,从⽽实现对Presenter的测试–从⽽不需要使⽤⾃动化的测试⼯具。
在MVP中,View并不直接使⽤Model,它们之间的通信是通过Presenter (MVC中的Controller)来进⾏的,所有的交互都发⽣在Presenter内部。
MVP优点:
模型与视图完全分离,我们可以修改视图⽽不影响模型;
可以更⾼效地使⽤模型,因为所有的交互都发⽣在⼀个地⽅——Presenter内部;
我们可以将⼀个Presenter⽤于多个视图,⽽不需要改变Presenter的逻辑。这个特性⾮常的有⽤,因为视图的变化总是⽐模型的变化频繁;如果我们把逻辑放在Presenter中,那么我们就可以脱离⽤户接⼝来测试这些逻辑(单元测试)。
MVP缺点:视图和Presenter的交互会过于频繁,使得他们的联系过于紧密。也就是说,⼀旦视图变更了,presenter也要变更。
MVP应⽤:可应⽤与Android开发。
MVVM:是Model-View-ViewModel的简写。
微软的WPF(Windows Presentation Foundation–微软推出的基于Windows 的⽤户界⾯框架)带来了新的技术体验, 使得软件UI层更加细节化、可定制化。
与此同时,在技术层⾯,WPF也带来了诸如Binding(绑定)、Dependency Property(依赖属性)、Routed Events(路由事件)、Command(命令)、DataTemplate(数据模板)、ControlTemplate(控制模板)等新特性。
MVVM模式其实是MV模式与WPF结合的应⽤⽅式时发展演变过来的⼀种新型架构模式。它⽴⾜于原有MVP框架并且把WPF的新特性糅合进去,以应对客户⽇益复杂的需求变化。
MVVM模式将Presenter改名为ViewModel,基本上与MVP模式⼀致。唯⼀的区别是,它采⽤了双向绑定(data-binding),View的变动,⾃动反应在ViewModel,反之亦然。
MVVM优点:
MVVM模式和MVC模式类似,主要⽬的是分离视图(View)和模型(Model),有⼏⼤优点:
低耦合,视图(View)可以独⽴于Model变化和修改,⼀个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
可重⽤性,可以把⼀些视图逻辑放在⼀个ViewModel⾥⾯,让很多view重⽤这段视图逻辑。
独⽴开发,开发⼈员可以专注于业务逻辑和数据的开发(ViewModel),设计⼈员可以专注于页⾯设计,使⽤Expression Blend可以很容易设计界⾯并⽣成xml代码。
可测试,界⾯向来是⽐较难于测试的,⽽现在测试可以针对ViewModel来写。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论