mvc mvp mvvm比较以及区别

作者: sys1211 | 来源:发表于2017-04-10 20:55 被阅读808次

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式。

    软件中最核心的,最基本的东西是什么? 是的,是数据。我们写的所有代码,都是围绕数据的。

    围绕着数据的产生、修改等变化,出现了业务逻辑。

    围绕着数据的显示,出现了不同的界面技术。

    没有很好设计的代码,常常就会出现数据层(持久层)和业务逻辑层还有界面代码耦合的情况。

    ORM等框架,解耦合了业务逻辑和数据之间的耦合,业务逻辑不再关心底层数据如何存储和读取。所有数据呈现给业务逻辑层的就是一个个的对象。

    而MVC, MVP, MMVM用来解决业务逻辑和视图之间的耦合。

    一、MVC模式

    MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写。MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

    Model

    用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。

    模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。

    View

    视图层负责数据的展示。

    在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里订阅Model的事件。

    Controller

    控制器是M和V之间的连接器,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

    MVC优点

    •由于MVC很好的分离了视图层和业务层,所以它具有以下优点

    •耦合性低

    •开发速度快

    •可维护性高

    •没有控件的概念,对html没有封装,易于理解

    •和其它平台(java, php)等更加相似。便于人才获取

    二、MVP模式

    MVP模式也是一种经典的界面模式。MVP中的M代表Model, V是View, P是Presenter。

    在MVP里,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。而且,Presenter与具体的

    View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,即重用!

    不仅如此,我们还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试 —— 而不需要使用自动化的测试工具。

    我们甚至可以在Model和View都没有完成时候,就可以通过编写Mock

    Object(即实现了Model和View的接口,但没有具体的内容的)来测试Presenter的逻辑。

    MVP的优势

    •模型与视图完全分离,我们可以修改视图而不影响模型

    •可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部

    •我们可以将一个Presener用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。

    •如果我们把逻辑放在Presenter中,那么我们就可以脱离用户界面来测试这些逻辑(单元测试)


    三、MVVM模式

    MVVM模式中,一个ViewModel和一个View匹配,它没有MVP中的IView接口,而是完全的和View绑定,所有View中的修改变化,都会自动更新到ViewModel中,同时ViewModel的任何变化也会自动同步到View上显示。

    这种自动同步之所以能够的原因是ViewModel中的属性都实现了observable这样的接口,也就是说当使用属性的set的方法,都会同时触发属性修改的事件,使绑定的UI自动刷新。(在WPF中,这个observable接口是

    INotifyPropertyChanged; 在knockoutjs中,是通过函数ko.observable()

    和ko.observrableCollection()来实现的)

    所以MVVM比MVP更升级一步,在MVP中,V是接口IView, 解决对于界面UI的耦合;

    而MVVM干脆直接使用ViewModel和UI无缝结合, ViewModel直接就能代表UI.

    但是MVVM做到这点是要依赖具体的平台和技术实现的,比如WPF和knockoutjs,

    这也就是为什么ViewModel不需要实现接口的原因,因为对于具体平台和技术的依赖,本质上使用MVVM模式就是不能替换UI的使用平台的.

    由于在winform中无法像WPF一样,支持数据和界面的双向绑定以及事件的监控,所以,在winform中MVP是最佳选择。

    WPF和html界面中使用Knockout,实现了observable, 所以使用MVVM.(应该说WPF就是为使用MVVM设计的)

    在web应用中,由于http是基于请求和响应方式协同工作的, 无法一直保持连接状态,所以无法达到MVP中Presenter之间的消息传递和MVVM中的ViewModel和界面之间的绑定, 所以MVC是最佳的选择。


    相关文章

      网友评论

        本文标题:mvc mvp mvvm比较以及区别

        本文链接:https://www.haomeiwen.com/subject/zwseattx.html