ReactiveCocoa相关ReactiveCocoa研究iOS develop

MVVM和ReactiveCocoa介绍

2015-11-12  本文已影响2005人  Girl_iOS

本文翻译自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
编写之前,先来脑补些基础知识! 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天

上一篇 下一篇

猜你喜欢

热点阅读