写点什么

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

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

关注

评论

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

速查!优惠券核销情况(支付宝优惠券)

盐焗代码虾

支付宝 经验分享 券核销

软件测试开发/全日制/测试管理丨Web自动化测试不同场景定位方式

测试人

软件测试

软件测试/测试开发/全日制/测试管理丨Playwright测试框架

测试人

软件测试

等保三级测评:TiDB 客户端服务端间通信开启加密传输实践

TiDB 社区干货传送门

实践案例 数据库连接

荣耀开发者大会2023 · 一张图读懂开发者服务分论坛

荣耀开发者服务平台

开发者大会 生态共建 honor 分发

从工程化角度,详解鹏程·脑海大模型训练过程

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 模型训练优化

图像边缘检测-去黑边-JAVA

alexgaoyh

Java 图像处理 去黑边 边缘检测 canny

如何通过kube-apiserver访问K8s集群中的App

华为云开发者联盟

开发 华为云 k8s集群 华为云开发者联盟

Postman POST请求教程:从入门到精通

Liam

Java 程序员 前端 后端 Postman

云桌面怎么选?一篇搞懂四大关键指标!

青椒云云电脑

云桌面 云桌面厂家 云桌面方案 云桌面系统

软件测试/测试开发全日制|Pytest测试框架Fixture作用域详解

霍格沃兹测试开发学社

【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)

码界西柚

Java 后端 unsafe 原理分析 2024年第八篇文章

软件测试/测试开发/全日制/测试管理丨selenium的三种等待方式

测试人

软件测试

软件测试/测试开发全日制|Pytest conftest.py配置文件如何使用?

霍格沃兹测试开发学社

软件测试/测试开发/全日制/测试管理丨Cypress测试框架

测试人

软件测试

告别信息差!奇点云SimbaMetric打破协作壁垒,为指标管理提效

奇点云

奇点云 数据指标体系 指标工厂

drainer 异常宕机原因分析

TiDB 社区干货传送门

集群管理 6.x 实践

喜讯!云起无垠入选2023年度中国数字安全能力图谱

云起无垠

大模型推理优化实践:KV cache复用与投机采样

阿里技术

大模型 推理优化 KV cache 投机采样 RTP-LLM

【标准解读】物联网安全的系统回顾

不在线第一只蜗牛

软件 物联网 项目开发

云服务器网站搭建全攻略:技巧与窍门

一只扑棱蛾子

云服务器

软件测试/测试开发全日制|Pytest中yield的用法详解

霍格沃兹测试开发学社

图像处理 - 自动纠偏 -JAVA

alexgaoyh

Java 图像处理 自动纠偏 傅里叶频谱 霍夫变换

Vue.js轻量级框架:快速搭建可扩展的管理系统

互联网工科生

Vue 表单 管理系统

云桌面直接当电脑用?云桌面到底是何方神圣

青椒云云电脑

桌面云 云桌面 云桌面解决方案

解锁加密经济领域的新篇章:Token Explorer 助您一臂之力

Footprint Analytics

区块链 加密货币 Token 公链

Postgres 中文周报:Postgres Weekly 537 期

酷克数据HashData

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