ReactorKit 是一个面向响应式单向 Swift 应用程序架构的框架,结合了 Flux 和响应式编程。其中,Flux 是 Facebook 用来构建客户端 Web 应用程序的应用架构。它借助单向数据流完善了 React 的可组合视图组件。它更多的是一种模式,而不是一种传统的框架。
ReactorKit Github 地址:
https://github.com/ReactorKit/ReactorKit
ReactorKit 的作者是韩国 iOS 开发者 Suyeol Jeon,他还开发了受欢迎的 Swift 语法糖 Then:
https://github.com/devxoul/Then
ReactorKit 使用 Swift 3 编写,基于 RxSwift 之上开发,也是 RxSwift 生态的一部分,你可以到 RxSwift 的 Slack 里参与 ReactorKit 的讨论。
在 ReactorKit 框架中,用户动作和视图状态都是通过可观测的流传递给每一层。这些流是单向的,因此,视图只能发出动作,而响应者只能发出状态,如下图所示:
按照设计,ReactorKit 旨在实现以下三个目标:
可测试性:ReactorKit 的第一个目标是将业务逻辑从视图分离,响应者不依赖于任何视图,可单独测试;
从小做起:ReactorKit 不要求整个应用程序遵循统一的架构,开发人员可以只在一个具体的视图中使用它,在已有的项目中使用 ReactorKit 也无需重写任何东西;
减少输入:对于简单的东西,ReactorKit 注重避免复杂的代码,与其他架构相比,它需要的代码更少。
ReactorKit 主要包含以下三个层次:
视图:视图展示数据。一个视图控制器和一个单元格被视为一个视图。视图将用户输入绑定到动作流,将视图状态绑定到每个 UI 组件。视图层不包含业务逻辑。视图只负责定义如何映射动作流和状态流。
响应者:响应者是一个独立的层,负责管理视图状态。响应者最重要的作用是从视图分离出控制流。每个视图都有相应的响应者,并将逻辑处理委托给响应者。响应者不依赖视图,很容易测试。
服务:ReactorKit 有一个特殊的、称为服务的层。服务层实现具体的业务逻辑。响应者介于视图和服务之间,管理事件流。当响应者收到来自视图的用户动作,它就会调用服务逻辑。服务会发送一个网络请求,并将响应返回给响应者。然后,响应者会使用服务响应创建一个变种流。
此外,一个响应者可以和多个服务通信。ServiceProvider 为响应者提供了到每个服务的引用。服务提供者在整个应用程序生命 ZZ 周期内只创建一次,并传递给第一个响应者。第一个响应者将同一个服务提供者实例的引用传递给子响应者。
ReactorKit 的 GitHub 页面上列出了以下几个示例:
Counter:最简单、最基本的 ReactorKit 示例;
RxTodo: 使用 ReactorKit 的 iOS Todo 应用;
Cleverbot: 使用 Cleverbot 和 ReactorKit 的 iOS Messaging 应用;
Drrrible: 使用 ReactorKit 的 Dribbble for iOS(已上架 App Store)。
延伸阅读:
ReactorKit 作者并未详细解释 iOS 中如何实现 Flux 架构,之前国外 PlanGrid 将它的 iOS App 从 MVC 转向 Flux,并写了一篇详细的分享,你可以阅读这篇文章的译文详细了解:
iOS 开发中的 Flux 架构模式
https://github.com/yifili09/gold-miner/blob/master/TODO/real-world-flux-ios.md
活动推荐:
由InfoQ主办的第二届GMTC全球移动技术大会即将来袭!大会将于6月9-10日在北京举行。本届大会,我们将探讨智能时代的大前端,2017年都有哪些值得关注的大前端趋势和实践?扫描二维码或点击阅读原文进入大会官网,现在报名享8折优惠!