ReactorKit:iOS单向数据流架构

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(应用商店)。

本文转自d1net(转载)

时间: 2024-08-01 00:04:18

ReactorKit:iOS单向数据流架构的相关文章

LSI:从“计算”架构到“数据流”架构的变迁

8月发生了一些事儿,但呈现的数据却具有逆推性:Google 1分钟价值11万美元:Amazon 100分钟价值700万美元等等.我们可以很清楚地感受到,每一分钟都在跳动的数据正在被采集.保有(存储)和分析,并带来价值!这就是云计算与大数据存在的本质,也是IT系统需要从传统架构转型到云架构的根本原因之一. 记得第五届中国云计算大会上,LSI总裁兼CEO Abhi Talwalkar明确表示:"云计算的商业价值在未来几年可以达到200亿美元,而且我们相信云产业价值会达到3万亿美元." 他的

iOS - Frame 项目架构

前言 iOS 常见的几种架构: 标签式 Tab Menu 列表式 List Menu 抽屉式 Drawer 瀑布式 Waterfall 跳板式 Springborad 陈列馆式 Gallery 旋转木马式 Carousel 点聚式 Plus 1.标签式 优点: 1.清楚当前所在的入口位置 2.轻松在各入口间频繁跳转且不会迷失方向 3.直接展现最重要入口的内容信息 缺点: 功能入口过多时,该模式显得笨重不实用 2.列表式 优点: 1.层次展示清晰 2.可展示内容较长的标题 3.可展示标题的次级内容

网络安全:捕包只能捕获单向数据流???急

问题描述 各位朋友:我学习捕包解析http协议.基本配置如下:各位请详细解析,最好拿出例子.我是初学者,很笨.fedora9linuxlibnidslibpcaplibnetgcc编译器问题一:在应用层用libnids捕获http数据流,但是,只能捕获到服务器发给我的响应信息,而我的客户端发给服务器的请求报文却不能捕获.我不知道这是为什么??具体编码如下:(见问题后面):问题二:参见http协议内容.charset字符集:我如何将字符集转换,比如实体内容如果为汉语,我解析出来printf为乱码,

Flux 是什么?

引言:本文的目标是通过了解Flux 提出的模式,来明白Flux 的核心要点,以及弄清楚它到底是什么.并且,由于Flux不是传统意义上的软件包,因此我们将仔细研究通过Flux 来解决设计思路上的问题. 本文选自<Flux架构>. Flux 作为一种全新的方式,用于支持建立复杂的可扩展用户界面.当你在网上搜寻Flux的相关资料时,能了解到的大概也就是类似以上这些内容了.但我们该如何定义这样一种全新的方式呢?又是什么让其优于其他前端架构呢? Flux 是一套模式 我们可能首先会在理解上遇到严酷的现实

Square对iOS App架构的新尝试---Ziggurat

今年六月,我做了一场关于避免臃肿的ViewController的演讲,用Swift讲解了一种采用"单向数据流"的架构模式.当时并没有发布相关的博客,甚至没有给这个架构起个名字.现在两者都有了.首先介绍一下Ziggurat:它是一种通过不可变的视图模型和单向数据流来实现的分层的.易测试的架构模式. 这个架构的名字Ziggurat是根据阶梯状的金字塔得来的.像金字塔的阶梯一样,数据以数据流的形式单向地沿着App的层级传递,并逐层缩小.单向不可变的数据流可以减少认知负载,同时使类也变得更加瘦

《Cisco IOS XR技术精要》一第2章 Cisco IOS XR架构

第2章 Cisco IOS XR架构 Cisco IOS XR技术精要 本章讲解了以下几个主题: Cisco IOS XR内核: Cisco IOS XR系统管理器: 进程间通信: 分布式服务: 进程迁移: Cisco IOS XR系统数据库: 高可用架构: 转发路径: 参考资料. Cisco IOS XR的设计定位是一款具有可扩展性.安全性.高性能.不间断系统运作特性的大型可升级系统.本章讨论了IOS XR的架构以及IOS XR是如何实现上述目标的.第一节讨论了IOS XR使用的微内核,后续章

详解iOS开发 - 用AFNetworking实现https单向验证,双向验证_IOS

自苹果宣布2017年1月1日开始强制使用https以来,htpps慢慢成为大家讨论的对象之一,不是说此前https没有出现,只是这一决策让得开发者始料未及,博主在15年的时候就做过https的接口,深知此坑之深,原因就是自身对这方面知识不了解加上网上的资料少,除此外还有博客不知对错就互相转载,导致当时网上几乎找不到能用的代码,这一点,博主说的毫不夸张. 鉴于此,博主一直想填一下这个坑,多增加一些正确的代码,来供广大开发者使用,后来一直被搁置,经过尝试后,博主现将整理好的代码发布在这里,希望能帮到

[译] iOS 响应式编程:Swift 中的轻量级状态容器

本文讲的是[译] iOS 响应式编程:Swift 中的轻量级状态容器, 原文地址:Reactive iOS Programming: Lightweight State Containers in Swift 原文作者:Tyler Tillage 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:deepmissea 校对者:FlyOceanFish iOS 响应式编程:Swift 中的轻量级状态容器 事物的状态 在客户端架构如何工作上,每一个 iOS

iOS面试题总结 二

1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答:Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import"&qu