美文网首页
2018-03-04

2018-03-04

作者: 24b6d528f337 | 来源:发表于2018-03-05 21:12 被阅读0次

    一、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的逻辑。

    三、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是最佳的选择。

    相关文章

      网友评论

          本文标题:2018-03-04

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