STT
一个帮助实现和使用 RxViper 架构的库。RxViepr 非常类似于标准的 Viper,但有几个改进。
- 这种架构不使用 in/out 层,所有事件都通过 Rx 传递。
- 每个模块可以有自己的自定义 Router,但在大多数情况下默认(SttRouter)就足够了。
- 使用绑定。
STT 模块包括
- 视图
- 展示者
- 交互器(可选)
- 路由器(可选)
- 组装器
图解
模块文件夹结构
您应该使用我们的模板来创建一个模块,但是您仍然需要为它创建文件夹。
模板生成所有文件,但在 98% 的情况下,您不需要自定义路由器,这在该模板中默认提供。您应该在组装器中删除其注册并替换解析为创建 SttRouter 实例,并将展示者中的类型替换为 SttRouterType
。
在某些情况下,您可能不需要交互器,因此您可以只删除它。
每个模块都具有以下结构
- 模块名称(文件夹)
- 组装器(文件夹)
- 模块名称Assembler.swift
- 交互器(文件夹)
- 模块名称InteractorType.swift
- 模块名称Interactor.swift
- 路由器(文件夹)
- 模块名称RouterType.swift
- 模块名称Router.swift
- 展示者(文件夹)
- 模块名称Presenter.swift
- 视图(文件夹)
- 模块名称ViewDelegate.swift
- 模块名称ViewController.swift
视图层
-
视图 - 仅表示布局(线框),不包含任何特定设计元素(如字体、颜色、属性等)。
-
视图代理 - 代表从展示者到其ViewController的回调,在大多数情况下不使用。
-
ViewController - 表示一个无业务逻辑的被动视图,包含仅有的出口、绑定和元素代码布局(如果有需要)。
展示者
展示者 - 位于ViewController
和Interactor/Router
之间的一层。它应仅包含命令(SttCommand
)、命令处理器和属性。所有责任传递给router或interactor。但展示者可以保持多个interactor(例如,如果我们有链接页面,但我们需要一些特定逻辑)。
注意:所有业务逻辑必须在
展示者Interactor中。
交互者
交互者 - 包含业务逻辑,当发生某些事件时(使用SttNotificationErrorService
处理错误)向视图产生错误。交互者不直接连接到API或数据库,所有请求应通过存储库传递。交互者仅转换数据、验证模型状态、处理错误(如果需要)。
路由器
路由器 - 包含页面之间的导航,可以将参数传递给目标控制器。
组装器
汇编器 - 为模块注册所有依赖项,解决依赖项的参数,并创建展示器。
仓库
仓库 - 使用Provider与API和数据库协同工作,管理程序中的所有数据,并且可以从不同的源(API或数据库)获取数据,或者从两者获取并合并这些模型。与API实体协同工作并返回它们。仓库应该只与组化实体协同工作。
提供者
提供者 - 表示 数据层。负责客户端和API/数据库之间的数据传输。程序还有用于存储本地小数据的 KeyValueStorage
。要存储某些数据集合,您可以使用 Realm
提供者。