MVC (Model-View-ViewModel)模型
mvc模型是大家最常用也是最喜欢用的开发模型。
MVVM(Model-View-ViewModel)是另一个架构GUI程序的模型
尽管MVVM和MVC看起来很相似(除了用一个ViewModel替换了Controller),但是他们有一个主要的不同:视图拥有ViewModel,和控制器不一样,ViewModel并不知道View的信息。
这点改变提供了很大的好处:
-
ViewModel可以测试,由于ViewModel不依赖View,所以可以不通过任何UI来测试ViewModel。
-
ViewModel可以像Model一样使用,如果需要,ViewModel可以复制或者序列化,就行主Model一样。这样可以快速的实现UI的重建和类似的行为。
-
ViewModel(大部分)是平台无关的,由于实际的UI代码在View上面,因此我们只需要很小的调整就可以让我们设计的ViewModel在Iphone、iPad和Mac上使用。
-
View和ViewController变的更简单,由于重要的逻辑被移到了其他地方(ViewModel),因此View和ViewController变成了简单的UI对象,这使得我们更容易理解和重新设计。
简而言之,用MVVM替换MVC能够使UI代码更加清晰和严格。
ViewModel应该包含的内容
ViewModel就像一个模型的适配器,他能够更好的展示数据。并且他也能够展示行为的变化。例如,一个ViewModel可能处理:
-
发起网络或数据库请求
-
确定何时应该隐藏或显示信息
-
日期和数字的格式化
-
本地化处理
然而,ViewModel并不负责实际信息的呈现或者输入处理,这些是View唯一需要做的领域。当ViewModel需要和View进行通信时,主要通过系统提供的数据绑定来实现的。
ViewController应该包含的内容
OS X和iOS都包含了View(或Windows)Controller,然而在MVVM中并没看到ViewController,乍一看这可能比较困惑,因为MVVM仅仅是关于View的。但细看我们会发现ViewController实际上是View层的一部分,因为他们处理的事情如下:
-
布局
-
动画
-
设备方向旋转
-
View和Window的转换,View的切换
-
提供页面UI的加载
因此,View实际上的意思是视图层,他包括ViewController。对于同一个屏幕区域,不需要同时拥有View和ViewController,只需要选择一个使用起来最简单的就好。无论你选择一个View或ViewController,你将仍然拥有一个ViewModel。
网友评论