MVVM和ReactiveCocoa介绍

作者: Girl_iOS | 来源:发表于2015-11-12 23:55 被阅读2005次

    本文翻译自MVVM Tutorial with ReactiveCocoa
    你也许在Twitter上看过这么一则笑话"iOS Architecture,where MVC stands for Massive View Controller".
    这是关于iOS开发者的笑话,然而你在开发的过程中也会遇到这样的问题:厚重且难以维护的view controller.
    本文将讨论应用的另一种架构Model-View-ViewModel(MVVM).得益于ReactiveCocoa,MVVM提供了MVC的可替代类型来减轻view controllers.
    通过本文的教程,你将编写一个简单的Flickr搜索app,如下图所示:

    FinishedApp.png
    编写之前,先来脑补些基础知识!
    • ReactiveCocoa简介
      本文主要讲解MVVM,而且假定你已经对ReactiveCocoa有所了解.如果你还没用过ReactiveCocoa,那么推荐你看看以前的教程来了解下.
      如果你想要复习下ReactiveCocoa的知识,我来小小总结一下.
      ReactiveCocoa的核心为signals即RACSignal类.Signals发出三种类型的事件流:next、completed、和error.
      通过此模式,ReactiveCocoa可以用来替代delegate、target-action、key-value observing等模式.
      通过signal API创建的代码更加统一且易读.但ReactiveCocoa真正强大之处在于通过这些信号源能进行更多高级操作.这些操作能在相当简洁高雅的操作下执行复杂的筛选、转换、信号协调等.
      在MVVM中,ReactiveCocoa扮演着重要角色.它提供ViewModel和View之间的绑定操作.

    • MVVM介绍
      Model-View-ViewModel(MVVM)设计模式通俗讲,是个UI设计模型.它是MV设计模式大家庭中的一员,MV模式还包括Model View Controller(MVC)和Model View Presenter等等.
      这些模式的业务逻辑和UI逻辑相分离,以使程序易于开发和测试.
      为了更好地理解MVVM,需要来了解下它的先辈.
      MVC为首个UI设计模式,可以追随到Smalltalk language of the 1970s.下图展示了MVC模型的元素及结构:

    MVCPattern-2.png
    此模式将UI分割成Model(用来代表程序的状态)与View(UI控件)和Controller(用来处理用户交互以及更新model模型)
    MVC很大的一个问题是它相当混乱.概念听起来很好,但当人们实现它时,Model、View、Controller之间看似圆形的关系,却很容易混为一坛,造成换乱.
    最近Martin Fowler介绍了MVC模型的演变Presentation Model,并通过微软来推广和使用MVVM. MVVMPattern.png

    这种模型的核心为ViewModel:用来呈现应用UI状态的model的一种.
    它包含UI控件的属性状态.例如当前text field里面的输入内容、一个特殊的按钮是否能用.而且还能提供view上的交互动作,例如按钮的点击和手势.
    ViewModel可以理解为model-of-the-view.
    MVVM的三个组件之间的关系同MVC相似,遵从以下准则:

    1. View有一个ViewModel的引用,不可逆转.
      2 ViewModel有一个相应的Model引用,不可逆转.

    如果你不遵从以上准则,将在使用MVVM时出错.
    这种设计模式有以下两个优点:

    1. 轻Views:你的UI逻辑都在ViewModel里从而使view变得很轻.
    2. 测试:你能够在没有View的情况下运行程序,大大增强了可测试性.

    这里你也许会有个疑问.如果View有个对应的ViewModel但却不可逆转,那么ViewModel如何来更新View呢?
    哈哈哈!这就是MVVM模型的所要解决的问题.

    Girl学iOS100天 第16天

    相关文章

      网友评论

      本文标题:MVVM和ReactiveCocoa介绍

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