RIBs 是 Uber 许多移动应用背后的跨平台架构框架。RIBs 的名字是 Router(路由器)、Interactor(交互器)和 Builder(构建者)的简称,这些是这个架构的核心组件。这个框架是为那些拥有大量工程师和嵌套状态的移动应用设计的。
RIBs 架构提供
- iOS 和 Android 之间的共享架构。 构建具有类似架构的跨平台应用,使 iOS 和 Android 团队能够交叉审查业务逻辑代码。
- 可测试性和隔离性。 类必须是易于单元测试并在隔离状态下进行推理的。单个 RIB 类有明确的责任,例如:路由、业务、视图逻辑、创建。另外,大多数 RIB 逻辑与子 RIB 逻辑解耦。这使得 RIB 类易于独立测试和推理。
- 用于提高开发者生产力的工具。 RIBs 随代码生成、内存泄漏检测、静态分析和运行时集成等 IDE 工具封装在一起,这些工具提高了大团队或小团队的开发者生产力。
- 可扩展的架构。 这个架构已被证明可以扩展到数百人在同一代码库和具有数百个 RIB 的应用上协同工作。
文档
要开始使用 RIBs,请参阅 RIBs 文档。其中描述了 RIBs 的关键概念,从它们是什么,它们的结构到常见的用例。
为了更多地使用 RIBs,我们编写了一系列教程,您可以亲身体验架构的主要方面。
要了解我们创建 RIBs 的背后的故事,请参阅我们首次在生产环境中发布 RIBs 时写的这篇文章,以及我们讨论 RIBs 架构如何工作的这段简短视频。
RIBs 和 MV*/VIPER 的区别是什么?
MVC、MVP、MVI、MVVM 和 VIPER 都是架构模式。RIBs 是一个框架。RIBs 与基于 MV*/VIPER 的框架的区别在于
- 业务逻辑驱动应用,而非视图树。与 MV*/VIPER 不同,RIB 不需要具有视图。这意味着应用层次结构由业务逻辑驱动,而不是由视图树驱动。
- 独立的业务逻辑和视图树。RIBs 解耦了业务逻辑范围的结构与视图层次结构。这允许应用程序拥有一个深层次的业务逻辑树,隔离业务逻辑节点,同时保持浅层次的视图层次结构,使得布局、动画和转换变得容易。
RIBs 还有一些独特之处。然而,这些特性也可以用其他 MV*/VIPER 框架实现。这包括:
- 跨平台方法,允许 iOS 和 Android 架构保持同步。
- 工具,便于在大型应用程序或团队中采用。开源的工具包括代码生成和静态代码分析的 IDE 插件。
- 对状态通信的明确观点,使用 DI 和 Rx。每个 RIB 定义其依赖项和其父级需要的依赖项。满足子级父级依赖项的父级组件作为构造器依赖项提供给子级构建器,以允许分层 DI 范围。这意味着信息通过这些依赖项在树中上下传递。
用法
- 克隆此存储库
- 使用您首选的安装机制进行集成
有关围绕 RIBs 构建的工具的用法,请参阅我们文档中的 “工具”部分。
为 Android 安装
要将 RIBs 的推荐最低配置集成到您的项目中,请将以下内容添加到您的 build.gradle
dependencies {
annotationProcessor 'com.uber.rib:rib-compiler-test:0.9.1'
compile 'com.uber.rib:rib-android:0.9.1'
testCompile 'com.uber.rib:rib-test-utils:0.9.1'
}
为 iOS 安装
CocoaPods
要将 RIBs 集成到您的项目中,请将以下内容添加到您的 Podfile
pod 'RIBs', '~> 0.9'
Carthage
要使用Carthage将RIBs集成到项目中,请在您的Cartfile
中添加以下内容
github "uber/RIBs" ~> 0.9
相关项目
如果您喜欢RIBs,请查看我们团队其他相关的开源项目
- Needle:一个编译时安全Swift依赖注入框架。
- Motif:在Dagger之上提供更简单的API,用于嵌套范围。
- Swift Concurrency:Uber使用的一组并发实用类,受java.util.concurrent包类启发。
- Swift Abstract Class:一个轻量级库和一个可执行文件,允许在Swift项目中安全地进行抽象类开发。
- Swift Common:由这组Swift开源项目使用的一些通用库。
许可证
Copyright (C) 2017 Uber Technologies
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://apache.ac.cn/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.