1、MVC模式
MVC全名是Model View Controller,是模型(model)-视图(view)-掌握器(controller)的缩写。MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是掌握器,利用MVC的目的是将M和V的实当代码分离,从而使同一个程序可以利用不同的表现形式,MVC分为以下几种模式。1.1、主动MVC
这里的主动的意思是,Model会主动关照View更新。而我们利用MVC框架, Struts, asp.net mvc等都不是主动MVC(视图的更新都是通过Controller完成的)Model用于封装与运用程序的业务逻辑干系的数据以及对数据的处理方法。模型中数据的变革一样平常会通过一种刷新机制被公布。为了实现这种机制那些用于监视此模型的视图必须事先在此模型上注册,从而视图可以理解在数据模型上发生的改变。View视图层卖力数据的展示。在视图中一样平常没有程序上的逻辑。为了实现视图上的刷新功能,视图须要访问它监视的数据模型(Model),因此该当事先在被它监视的数据那里订阅Model的事宜。Controller掌握器是M和V之间的连接器,用于掌握运用程序的流程。它处理事宜并作出相应。“事宜”包括用户的行为和数据模型上的改变。

1.2、被动MVC
被动MVC 与主动MVC的差异在于: 1. 模型对视图和掌握器一无所知,它仅仅是被它们利用 2. 掌握器利用视图,并关照它更新数据显示 3. 视图仅仅是在掌握器关照它去模型取数据的时候它才这么做(视图并不会订阅或监视模型的更新)
1.3、Web运用中的MVC
Web中的MVC框架大部分都是被动MVC模式,小部分是主动MVC,由于web运用中http是基于要乞降相应办法协同事情的,因此当做事器真个model(数据)发生变革时,它不会立即更新客户真个view,只有客户端重新要求或刷新页面时才更新。
MVC模式特点:
MVC很好的分离了视图层和业务层,以是它具有耦合性低,开拓速率快,可掩护性高 ,没有控件的特点,对html没有封装,比较易于理解和其它平台(java, php)等更加兼容。
2、MVP模式
MVP模式也是一种经典的界面模式。MVP中的M代表Model, V是View, P是Presenter, MVP模式是一个真正意义上的隔离View的细节和繁芜性的模式。由于在其它模式中V都代表的是UI界面, 是一个html页面,XAML文件或者winform界面。但是在MVP模式中的V代表的是一个接口,一个将UI界面提炼而抽象出来的接口。接口意味着任何实现了该接口的界面,都能够复用已有的Presenter和Model代码,P则是Model和View之间的桥梁,卖力将对应的Model和View组合到一起。MVP模式特点:
在MVP里,Presenter完备把Model和View进行了分离,紧张的程序逻辑在Presenter里实现。而且,Presenter与详细的 View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变即可重新利用,不仅如此我们还可以编写测试用的View,仿照用户的各种操作,从而实现对Presenter的测试 —— 而不须要利用自动化的测试工具,乃至可以在Model和View都没有完成时候,就可以通过编写Mock Object来测试逻辑单元。
3、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。4、MVC、MVP和MVVM模式利用场景选择
由于在winform中无法像WPF一样,支持数据和界面的双向绑定以及事宜的监控,以是在winform中MVP是最佳选择。在WPF和html运用中利用Knockout可以实现了observable, 以是利用MVVM是最佳选择。在WEB运用中由于HTTP是基于要乞降相应办法协同事情的, 无法一贯保持连接状态,无法达到MVP中Presenter之间的通报和MVVM中的ViewModel和界面之间的绑定, 以是利用MVC是最佳的选择。