阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

客服发送一条消息背后的技术和思考

得物技术

体验 IM 客服

对话在行人|浙纺服职院:数智赋能教育高质量发展

用友BIP

2023全球商业创新大会 对话在行人

用友签约一级央企中国一重!

用友BIP

资产管理

HarmonyOS数据管理与应用数据持久化(一)

HarmonyOS开发者

低代码可视化逻辑编排工具

树上有只程序猿

低代码 可视化编排 JNPF

Rust中non_exhaustive的enum

胡译胡说

rust

NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?

百度搜索:蓝易云

Java android kotlin HTTP NetMock

缺客户、缺钱、缺时间——实业经营的真挑战,中国企业分别突破

B Impact

陌生链接可能是诈骗网址,谁来保护我们的上网安全?

最新动态

以云原生应用构建现代化架构的企业业务系统

谐云

一座 “数智桥梁”,华为助力“天堑变通途”

脑极体

AI

Ping和ARP流程解析

王玉川

router Switch ping ICMP ARP

Websocket、Socket、HTTP之间的关系。

百度搜索:蓝易云

Linux socket HTTP websocket 运维‘

数据库|PostGreSql 和 MySql 的优劣对比

谐云

桌面云一体机什么品牌最好?

青椒云云电脑

桌面云 一体机 桌面云一体机

影视企业有哪些方式将视频文件快速海外跨国传输国内?

镭速

跨国文件传输

跨国文件传输为什么要用专业的大文件传输软件?

镭速

跨国文件传输

Python JSON 使用指南:解析和转换数据

小万哥

Python 程序员 软件 后端 开发

陈奕迅全新专辑《CHIN UP!》上线华为音乐,五年后心血之作强势来袭

最新动态

第23期 | GPTSecurity周报

云起无垠

单模光纤与多模光纤是什么呢?

小齐写代码

Gartner发布2024年十大战略技术趋势

谐云

还得是PHP

谐云

Serverless,无服务器时代的创新之旅开启了吗

谐云

第22期 | GPTSecurity周报

云起无垠

华为Mate 60必备,这几个保护隐私的设置太实用了

最新动态

Java while 和do while 循环

HoneyMoose

企业如何开展数据管理体系建设,激活数据价值?

用友BIP

数据 数据价值

手机是数字世界的另一个你,你的隐私还安全吗?

最新动态

技术、前沿、未来、AI:Stack Overflow 2023 年度报告重磅发布

谐云

火山引擎ByteHouse:如何用OLAP引擎提升数字营销效果?

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号11月PK榜

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