首先,我要先给大家介绍一下这三种模式:
MVC模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
MVP模式:简称:MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
MVVM模式:MVVM模式不但能够实现UI设计的分离,而且能充分发挥RIA技术中的数据绑定的技术和特点,提高软件的复用性。
下面,我再说一下这三种模式的好处:
MVC模式:
1、一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。
2、模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
3、提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑和数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。
MVP模式:
1、模型与视图完全分离,我们可以修改视图而不影响模型。
2、可以更高效地使用模型,因为所有的交互都发生在一个地方 —— Presenter内部。
3、我们可以将一个Presener用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。
MVVM模式:
下面我们说一下这三种模式的缺点:
MVP模式:
Presenter中除了应用逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。
MVC模式:
Controller测试困难。因为视图同步操作是由View自己执行,而View只能在有UI的环境下运行。在没有UI环境下对Controller进行单元测试的时候,应用逻辑正确是无法验证的:Model更新的时候,无法对View的更新操作进行断言。
View无法组件化。View是强依赖特点的Model的,如果需要把这个View抽出来作为一个另外一个应用程序可复用的组件就困难了,因为不同程序的Domain Model是不一样的。
MVVM模式:
过于简单的图形界面不适用,或说牛刀杀鸡。对于大型的图形应用程序,视图状态较多,ViewModel的构建和维护的成本都会比较高。 数据绑定的声明是指令式地写在View的模板当中的,这些内容是没办法去打断点debug的。
可以看到,从MVC->MVP->MVVM,就像一个打怪升级的过程。后者解决了前者遗留的问题,把前者的缺点优化成了优点。同样的Demo功能,代码从最开始的一堆文件,优化成了最后只需要20几行代码就完成。MV*模式之间的区分还是蛮清晰的,希望可以给对这些模式理解比较模糊的同学带来一些参考和思路。
谢谢大家的支持^v^