ReactiveCocoa的编程思想与具体设计

(一)ReactiveCocoa的作用
在iOS开发过程中,经常因为交互而产生大量的网络请求、点击交互、数据更新等异步事件,特别是iOS提供丰富多样的方式来处理这些交互事件,如traget-action、delegate、kvo、block,若不加规定地使用会导致代码十分混乱,而过多地使用也容易增加类与类之间的耦合。针对这项问题,ReactiveCocoa提供了良好的解决方案给我们,它用信号代表这些异步事件,同时提供统一的方式让我们处理信号,同时将监听事件与相应的处理代码直接绑定在一起,十分方便,无需跳转到对应的方法(特别是层级特别复杂的情况更糟糕),提供了一个高聚合、低耦合的开发、维护体验。如下:

ReactiveCocoa的编程思想与具体设计_第1张图片
(二)编程思想
ReactiveCocoa主要结合了以下两种编程风格:
  • 函数式编程(Functional Programming,FP)
  • 响应式编程(Reactive Programming,RP)
所以,ReactiveCocoa也可以被称为FPR框架。

响应式编程,是一个以面向事件流和事件传递为主要关注点的编程范式。所以使用ReactiveCocoa框架搭建iOS应用程序时,主要是在考虑事件流的连接,以及在事件传播的过程中需要如何对数据进行处理,使其到达事件流的终点能直接有效。根据以上理论,ReactiveCocoa设计了以下类图:
ReactiveCocoa的编程思想与具体设计_第2张图片
从上图我们可以得出ReactiveCocoa的四大组件:
  • 信号源:RACStream及其子类,最为核心,其它组件都围绕其运作,其代表所有异步事件(事件源),而且信号源还可以进行合作、分离来创建新的信号源。
  • 订阅者:RACSubsciber及其子类,订阅者就是处理信号源的类,其中有订阅者的信号为热信号,没有订阅者的信号为冷信号。信号源把变化传递给订阅者前可以通过一系列的链式调用对数据进行合适的处理,以确保到达订阅者处理方法的是有效数据。
  • 调度器:RACScheduler及其子类,用于统一调度订阅者订阅信号源的过程所涉及到的任务,这样才能确保所有任务都能按照合理的顺序进行,RACSubscriber的本质骑士是对GCD的简单封装。
  • 清洁工:RACDisposable及其子类,RACDisposable其实是在一个信号已经完成任务时执行取消订阅的相应逻辑。
所以ReactiveCocoa框架构造了一套用于建立事件流的工具给我们进行开发。

函数式编程,是一种尽量将所需要的处理都封装成函数,然后通过函数嵌套、链式调用的方式来实现逻辑的编程范式。在ReactiveCocoa中就充斥了不少函数式编程的影子。如在数据源后面插入filter、map、redue等处理函数都是链式调用的形式实现的。而且构建了RACSequece、RACTuple来替代NSDictionary、NSArray的数据模型,其中RACSequece、RACTuple支持链式调用,给数据运算提供了很多的便捷,所有的这些设计都是提高编程效率与代码可读性的,因为一整个事件流的处理就这样按照顺序呈现给开发者。


参考文章:
  • (I) ReactiveCocoa(RAC)编程思想和MVVM架构进阶
  • (II) ReactiveCocoa(RAC)编程思想和MVVM架构进阶
  • (III) ReactiveCocoa(RAC)编程思想和MVVM架构进阶
  • (IV) ReactiveCocoa(RAC)编程思想和MVVM架构进阶
  • (V) ReactiveCocoa(RAC)编程思想和MVVM架构进阶
  • ReactiveCocoa v2.5 源码解析之结构总览
  • 《函数式编程语言三个重要概念:functor、applicative、monad》

你可能感兴趣的:(ReactiveCocoa的编程思想与具体设计)