
三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试。
2 MVC MVP2.1 MVC
1、VIEw接受用户的交互请求,
2、VIEw将请求转交给Controller,
3、Controller *** 作Model进行数据更新
4、数据更新之后,Model通知VIEw数据变化
5、VIEw显示更新之后的数据
VIEw和Controller使用Strategy模式实现,VIEw使用Composite模式,VIEw和Model通过Observer模式同步信息。Controller不知道任何VIEw的细节,一个Controller能被多个VIEw使用。MVC的一个缺点是很难对controller进行单元测试,Controller *** 作数据,但是如何从VIEw上断言这些数据的变化呢?例如,点击一个VIEw的按钮,提交一个事件给Controller,Controller修改Model的值。这个值反映到VIEw上是字体和颜色的变化。测试这个Case还是有点困难的。
2.2 MVP
1、 VIEw接受用户的交互请求
2、 VIEw将请求转交给Presenter
3、 Presenter *** 作Model进行数据库更新
4、 数据更新之后,Model通知Presenter数据发生变化
5、 Presenter更新VIEw的数据
Presenter将Model的变化返回给VIEw。和MVC不同的是,presenter会反作用于vIEw,不像controller只会被动的接受vIEw的指挥。正常情况下,发现可以抽象vIEw,暴漏属性和事件,然后presenter引用vIEw的抽象。这样可以很容易的构造vIEw的mock对象,提高可单元测试性。在这里,presenter的责任变大了,不仅要 *** 作数据,而且要更新vIEw。
在现实中mvp的实现会根据vIEw的充、贫血而有一些不同,一部分倾向于在vIEw中放置简单的逻辑,在presenter放置复杂的逻辑,另一部分倾向于在presenter中放置全部的逻辑。这两种分别被称为:Passive VIEw和Superivising Controller。
在Passive VIEw中,为了减少UI组件的行为,使用controller不仅控制用户事件的响应,而且将结果更新到vIEw上。可以集中测试controller,减小vIEw出问题的风险。
在Superivising Controller中的controller既处理用户输入的响应,又 *** 作vIEw处理vIEw的复杂逻辑。
3 M-V-VM
MVVM是在原有领域Model的基础上添加一个viewmodel,这个viewmodel除了正常的属性意外,还包括一些供VIEw显示用的属性。例如在经典的MVP中,vIEw有一个属性ischeck,需要在presenter中设置vIEw的ischeck值。但是在MVVM中的presenter也会有一个ischeck属性来同步vIEw的ischeck属性,可能会用到observer模式同步ischeck的值。在MVVM中,presenter被改名为viewmodel,就演变成了你看到的MVVM。在支持双向绑定的平台,MVVM更受欢迎。例如:微软的WPF和Silverlight。
【Blog】http://virusswb.cnblogs.com/
【MSN】jorden008@hotmail.com
【说明】
转载:http://www.cnblogs.com/Leo_wl/archive/2011/11/04/2236669.html
总结以上是内存溢出为你收集整理的表现层系列:MVC vs. MVP vs. MVVM全部内容,希望文章能够帮你解决表现层系列:MVC vs. MVP vs. MVVM所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)