2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

C++ 手把手教你实现可变长的数组

小林coding

c++ 编程 数组

Go语言专家测试,80%的人第一题就挂了!

博文视点Broadview

云原生 评测 Go 语言

C++ this指针的理解和作用

小林coding

c c++ 指针

Java NIO 是 NIO么?

soolaugust

Java io nio

知识点梳理:聊聊iOS SDK数据采集那点事儿

易观大数据

C++ 自增、自减运算符的重载和性能分析

小林coding

c++ 编程 运算符

C++ static 与 const 的认识

小林coding

c++ 编程 static关键字

职教黄金时代,河南如何继续“乘风破浪”?

InfoQ_967a83c6d0d7

白鹭引擎助力《迷你世界》研发团队开发3D小游戏版

DT极客

区块链:在发展的同时,准备好你的产品。

石云升

区块链 DCEP 创新

最佳实践:使用阿里云CDN加速OSS访问

阿里云Edge Plus

CDN

C++ 一篇搞懂继承的常见特性

小林coding

c++ 编程 继承

Volcano:带你体验容器与批量计算的碰撞的火花

华为云开发者联盟

Kubernetes 容器 分布式 Volcano 批量计算

央行发行的数字货币会带来哪些变化?

石云升

区块链 数字货币 DECP

排序算法一(冒泡排序、选择排序、插入排序)

xcbeyond

Java 算法 冒泡排序 选择排序 插入排序

C++ 模板常见特性(函数模板、类模板)

小林coding

c++ 编程 模板方法

Linux 平均负载高了怎么办?

小林coding

Linux 问题处理 linux命令

SpringCloud(Netflix)-技术专题-Ribbon的基本使用

码界西柚

Java 技术 SpringCloud

云计算的可信新边界:边缘计算与协同未来——【两万五千字长文】

华为云开发者联盟

云计算 云原生 5G 边缘计算 云服务

使用 Golang 和 HTML5 开发一个 MacOS App

郭旭东

macos Go 语言

高效程序员的45个习惯:敏捷开发修炼之道(2)

石云升

读书笔记 敏捷开发 对事不对人 欲速则不达

排序算法二(归并排序、快速排序、希尔排序)

xcbeyond

Java 算法 快速排序 归并排序 希尔排序

C++ 赋值运算符‘=‘的重载(浅拷贝、深拷贝)

小林coding

c++ 编程 浅拷贝和深拷贝

SpreadJS 纯前端表格控件应用案例:铭天预算执行系统

葡萄城技术团队

SpreadJS 预算执行系统

Java-技术专题-final关键字

码界西柚

经济优势再显,江苏如何通过职教打造人才高地?

InfoQ_967a83c6d0d7

2. 整体把握 CocoaPods 核心组件

Edmond

ruby ios swift CocoaPods 包管理工具

C++ 一篇搞懂多态的实现原理

小林coding

c++ 编程 封装、继承、多态

C++ 流插入和流提取运算符的重载

小林coding

c++ 编程

微服务-技术专题-初步介绍服务发现

码界西柚

Java 技术 微服务

C++ 运算符重载的基本概念

小林coding

c++ 编程

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