写点什么

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:002966
用户头像

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

关注

评论

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

Spark 核心详解

五分钟学大数据

spark 1月月更

开发postgreSQL connector支持update/delete操作的代码

openLooKeng

研发转岗产品经理,有什么需要注意的呢?

石云升

产品经理 产品思维 1月月更

手把手教你在优麒麟上搭建 RISC-V 交叉编译环境

优麒麟

Linux 开源 开发者 risc-v 优麒麟

TDSQL | DTS for PostgreSQL 逻辑复制详解

腾讯云数据库

tdsql 国产数据库

架构训练营 week7 课程总结

红莲疾风

「架构实战营」

参加开源贡献后,大厂向我抛出了橄榄枝

openLooKeng

18M 超轻量图像识别系统,商品、车辆、人脸识别一网打尽!

百度大脑

看看 InfoQ 的编辑和各大厂技术专家们,如何盘点技术圈的 2021

InfoQ写作社区官方

2021年度技术盘点与展望

[架构实战营]第六模块作业

Vincent

「架构实战营」

架构训练营 week7 作业

红莲疾风

「架构实战营」

架构实战营 - 群讨论汇总 (2022)

华仔

#架构实战营

设计模式之工厂模式

Catch

设计模式

在 Kubernetes 上安装和运行极狐GitLab实例

极狐GitLab

Kubernetes 极狐GitLab

实现科技自立自强,各企业如何发力?

脑极体

详解 Flink CEP(以直播平台监控用户弹幕为例)

五分钟学大数据

flink 1月月更

回顾明道云的2021(文末互动有奖)

明道云

对比下 datax 的 OceanBase/MYSQL 不同数据同步方案的效率差异 || 聊聊参数 rewriteBatchedStatements

明哥的IT随笔

数据库

设计模式之设计原则

Catch

设计模式

Luna:你想要的 React Native 调试工具

Shopee技术团队

前端 开发者工具 React Native

“中国智能科学技术最高奖”公布,华为云田奇获杰出贡献奖

Geek_2d6073

Flink Keyed State 对 Key 的管理机制解析

邸星星

flink 状态管理 Flink KeyedState

AI贺新年,开发者的虎年这样过才有意思

华为云开发者联盟

AI 华为云

TDSQL | 《checkpoint原理浅析》

腾讯云数据库

tdsql 国产数据库

创梦天地发行公益性数字艺术藏品,打造不一样的年味

科技热闻

设计模式之单例模式

Catch

设计模式

分布式项目中,选型与依赖管理

架构 分布式 微服务 架构设计

知名身份安全厂商九州云腾加入龙蜥社区

OpenAnolis小助手

Linux 开源 互联网

夜莺系统调研报告

苍狼

Hive SQL底层执行过程 | 社区征文

五分钟学大数据

hive 新春征文

TDSQL | TXSQL数据库内核与特性

腾讯云数据库

tdsql 国产数据库

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