iOS MVVM模型中各职责定义

作者: const_zhou | 来源:发表于2016-09-21 18:45 被阅读658次

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。

相关文章

网友评论

    本文标题:iOS MVVM模型中各职责定义

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