Wrappres' Studio.

响应式框架的变迁

字数统计: 353阅读时长: 1 min
2020/02/16 Share

响应式框架的变迁

Monad

ReactiveCocoas是采用号称纯函数式编程语言里的Monad设计模式搭建起来的,核心类RACStream。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

typedef RACStream * (^RACStreamBindBlock)(id value, BOOL *stop);

/// An abstract class representing any stream of values.
///
/// This class represents a monad, upon which many stream-based operations can
/// be built.
///
/// When subclassing RACStream, only the methods in the main @interface body need
/// to be overridden.
@interface RACStream : NSObject

+ (instancetype)empty;
+ (instancetype)return:(id)value;
- (instancetype)bind:(RACStreamBindBlock (^)(void))block;
- (instancetype)concat:(RACStream *)stream;
- (instancetype)zipWith:(RACStream *)stream;

@end

从代码视觉上看

Monad为了避免赋值语句做了很多数据传输的管道工作。我们在分析问题时,就很容易从代码层面清晰地看出数据流向和变化。而如果是赋值语句,在分析数据时就需要考虑数据状态和生命周期,会增加调试定位的成本,强依赖调试工具去观察变量。

从语言发展来看

Monad虽然可以让上层接口看起来很简洁,但底层的实现却犹如一团乱麻。为了达到纯函数的效果,Monad底层将各种函数的参数和返回值封装在了类型里,将本来可以通过简单数据赋值个变量记录的方式复杂化了。

不采用Monad模式的函数响应式框架

上层按照函数式编程的思想来搭建数据流管道,在下层使用赋值方法来管理数据

CATALOG
  1. 1. 响应式框架的变迁
    1. 1.1. Monad
    2. 1.2. 不采用Monad模式的函数响应式框架