写点什么

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

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

关注

评论

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

真的香!Github一夜爆火被各大厂要求直接下架的面试题库也太全了

Java架构之路

Java 程序员 架构 面试 编程语言

总是记不住java的IO流用法?用N个问题教你掌握java IO流

华为云开发者联盟

Java 字符串 IO流 字节输入流 字符流

世界读书日,爱奇艺ers的技术产品书单

爱奇艺技术产品团队

读书

苹果(Apple Watch)手表使用必知必会19条

Flychen

苹果手表 IWatch Apple Watch

40 图|硬核解析用 Mac M1 玩转 SpringCloud

悟空聊架构

开源 Mac SpringCloud m1 passjava

噱头or契机:多端协同游戏的草蛇灰线

脑极体

阿里“秘密团队”整理出来的一份Java面试复盘手册!全面复盘在望

Java架构之路

Java 程序员 架构 面试 编程语言

马丁策略倍投软件开发,量化倍投系统

2021年处置非法集资部际联席会议:密切关注打着区块链、虚拟货币等旗号的新型风险

CECBC

推荐5个4K视频下载网站 (百万优质资源)

科技猫

网站 分享 视频 经验 资源分享

网络协议学习笔记 Day2

穿过生命散发芬芳

网络协议 4月日更

4种语义分割数据集Cityscapes上SOTA方法总结

华为云开发者联盟

语义分割 OCR 数据集Cityscapes HRNet SegFix

千人万面奇妙自见:爱奇艺短视频推荐技术中多兴趣召回技术的演变

爱奇艺技术产品团队

推荐 短视频 模型 召回

当区块链遇到工业互联网,浪潮云洲链正在那里

云计算

【得物技术】得物分布式UI自动化实践

得物技术

测试 UI 质量 自动化测试 得物技术

大学生调研:在选择工作时,最看重什么?

石云升

28天写作 4月日更 1 周年盛典

Java最前沿技术——ZGC

AI乔治

Java 架构 jdk ZGC JVM

一次用户故事拆分分享

Bruce Talk

敏捷 Agile 用户故事 User Story

LiteOS内核源码分析:动态内存之Bestfit分配算法

华为云开发者联盟

LiteOS Huawei LiteOS 动态内存 Bestfit 分配算法

Flink的状态一致性

大数据技术指南

flink 4月日更

ShutdownHook原理

捉虫大师

Java

深入汇编指令理解Java关键字volatile

AI乔治

Java 架构 volatile Java内存模型

这份阿里P8技术专家整理的《一面到底》Java岗,GitHub已标星79k

Java架构之路

Java 程序员 架构 面试 编程语言

欢迎 ProForma 的制造商 ThinkTilt 加入 Atlassian 的大家庭!

Atlassian

敏捷 esm ITSM Atlssian JiraServiceManagement

Git 常用命令速查

箭上有毒

4月日更

Flink的Checkpoint持久化存储方案

五分钟学大数据

flink 4月日更

掉坑了!GROUP_CONCAT函数引发的线上问题

AI乔治

Java MySQL 架构 GROUPING运算符

读书有用吗

孙苏勇

读书

自动源代码质量度量(ISO/IEC 5055)

Tom(⊙o⊙)

软件质量 静态分析

如何从零开始学Python:(7)如何解决发布和上传代码过程中遇到的问题?

广之巅

Python 4月日更

浅析 Linux 中的 I/O 管理

赖猫

Linux

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