QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

去年我是怎么解决团队问题的

光毅

团队管理 领导力

OpenHarmony/HarmonyOS应用上下文Context

坚果

OpenHarmony OpenHarmony3.2 三周年连更

AI日课@20230417:AI之于教育;ChatGPT Sidebar:一个浏览网页时的强力AI助手

无人之路

人工智能 ChatGPT

基于多场景化解决方案,华为云助力制造业企业走出数字化转型困境

YG科技

小白福利 | Window前言

GreatSQL

MySQL greatsql greatsql社区

IDEA导入多模块maven项目时部分模块未成功加载

redcoder54

IDEA springboot

一文读懂线程池的实现原理

老周聊架构

三周年连更

Unity 报错之 接入YomboTGSDK后打包报错:mainTemplate.gradle needs to be updated(property ‘unityStreamingAssets‘)

陈言必行

Unity 三周年连更

CSS文本平衡排版 text-wrap:balance

南城FE

CSS 前端 设计

华为云场景化解决方案 助力制造业企业数字化转型

YG科技

使用 Amazon Step Functions 和 Amazon Athena 实现简易大数据编排

亚马逊云科技 (Amazon Web Services)

全栈开发实战|SSM框架整合开发

TiAmo

ssm mybits 全栈开发 三周年连更

HTTP方法大全

阿泽🧸

HTTP 三周年连更

【倒计时4天】金融服务用户体验专场沙龙开启预约

易观分析

金融 经济

美光遭遇审查,存储市场成了“香饽饽”?

脑极体

美光

NDP常用报文格式

穿过生命散发芬芳

NDP 三周年连更

跨平台应用开发进阶(四十九)由环境切换引发的页面通讯机制思考

No Silver Bullet

跨平台应用开发 三周年连更 页面通讯机制

STM32F103RCT6驱动SG90舵机-完成正反转角度控制

DS小龙哥

三周年连更

Java面向对象编程高级

timerring

Java

如何设计一个几十万在线用户弹幕系统

做梦都在改BUG

编程技术为王的天下终究要散了吗| 社区征文

卢卡多多

三周年征文

Java如何实现手动连接数据库(mysql或oracle)|超级详细,建议收藏

bug菌

MySQL oracle 三周年连更

前端面试题之性能优化大杂烩

肥晨

三周年连更

Linux命令之find的高级用法

小毛驴的烂笔头

Linux find

挑战 30 天学完 Python:Day8 数据类型 - 字典 dict

MegaQi

Python 挑战30天学完Python 三周年连更

《设计模式之禅》Strategy_Pattern--策略模式

浅辄

设计模式 Java、 三周年连更

《致“抄我”的朋友:你已经被我列入白名单!》

程序员晚枫

开源

Go语言并发编程的核心 —— GMP调度模型

Jack

Socket学习网络基础

芯动大师

android TCP通信 三周年连更

简单高效的Shell数组操作技巧与技术

小毛驴的烂笔头

linux命令 linux数组

轻医美面部抗衰品牌“娅蔻”宣布将进军江苏市场

科技热闻

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