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