写点什么

ReactorKit:iOS 单向数据流架构

  • 2017-05-10
  • 本文字数:1048 字

    阅读完需:约 3 分钟

ReactorKit 是一个面向响应式单向 Swift 应用程序架构的框架,结合了 Flux 响应式编程。其中,Flux 是 Facebook 用来构建客户端 Web 应用程序的应用架构。它借助单向数据流完善了 React 的可组合视图组件。它更多的是一种模式,而不是一种传统的框架。

在 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(应用商店)。

ReactorKit 遵循 MIT 许可协议。感兴趣的读者可以下载试用及加入 ReactorKit 社区


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-05-10 19:003385
用户头像

发布了 1008 篇内容, 共 432.6 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

Mac 系统 VS Code 设置向下复制粘贴当前行快捷键(Ctrl + D)

AlwaysBeta

ide vscode Mac

第二周-框架设计-学习总结

刘希文

第13周作业

有感-人工智能学习

superman

架构师训练营第 1 期第 2 周学习总结

好吃不贵

极客大学架构师训练营

磨刀不误砍柴工,搞定云网络系统性能测试

lklmyy

IaaS 云网络 质量保障

Apache Pulsar 社区周报|09-12~09-18

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

01_Eureka源码初探

阿亮

源码 微服务 SpringCloud Eureka

“工业互联网+区块链”融合发展新图景

CECBC

区块链 互联网 信息安全

架构师训练营第 1 期第 2 周作业

好吃不贵

极客大学架构师训练营

中国消费者独享长达三个月的年终跨境网购狂欢季

爱极客侠

Flink 源码 | 自定义 Format 消费 Maxwell CDC 数据

Apache Flink

flink

你觉得Android又凉了?那带你看下2020年Android开发的前景如何?

Geek_211aa0

android 程序员 中年危机 移动开发 前景

Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings解决办法

Geek_416be1

阿里3轮面试都问了RecyclerView

Geek_211aa0

android 面试 阿里 移动开发 RecyclerView

学习笔记-人工智能概念(小白)

superman

区块链行业简报

CECBC

区块链 金融 银行

【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?

冰河

MySQL 高可用 主从复制

甲方日常 21

句子

生活 工作 随笔杂谈 日常

week13--课后总结

Geek_165f3d

为什么选择敏捷软件开发-考虑敏捷开发的主要优势

小隐乐乐

敏捷开发

week13---课后作业

Geek_165f3d

按自己的逻辑,避免千篇一律的呈现品牌官方商城

boshi

产品设计 页面展示 商城

北京自贸区总体方案公布:建设法定数字货币试验区

CECBC

金融 国内宏观

华为,与山河共舞这支芭蕾

脑极体

腾讯看点基于 Flink 的实时数仓及多维实时数据分析实践

Apache Flink

flink

Spring 5 中文解析数据存储篇-DAO支持

青年IT男

Spring5

提高网站的吞吐量

架构师修行之路

Java8 之 Lambda 表达式

hepingfly

Lambda java8 新特性

机器学习如何推进现代医疗护理服务的变革

Geek_b33b8e

学习 开源 跨平台 行业资讯 医疗方案

机器学习笔记-概念

superman

ReactorKit:iOS单向数据流架构_Android/iOS_谢丽_InfoQ精选文章