通过学习清洁架构快速编写清洁的Swift
在短时间内学习干净的Swift架构基础知识。
还记得那些日子,我们这些iOS开发者花了几小时几十天来学习MVVM吗?现在我相信早晚有一天,我们会到处寻找学习和掌握清洁架构的机会。
那么我们为什么不从今天开始呢?
在这篇文章中,我将告诉你什么是Clean Architecture,你可以快速了解它的许多东西。
关于Clean Swift架构
Clean Swift(简称VIP)是鲍勃叔叔的清洁架构,适应于iOS和macOS项目。用于编写干净的Swift代码的VIP架构是由Raymond Law提出的。
正如你可能知道的,VIP代表视图-交互器-呈现器。
这个架构中的项目结构是围绕场景建立的。一个场景应该有这些组件。
- 视图控制器
- 交互器
- 演示者
- 工作者
- 模型
- 路由器
- 配置器(可选)
换句话说,我们将有一套适用于每个场景的组件,为我们的控制器服务。
VIP周期
- 视图控制器接受一个用户事件,构造一个请求对象,并将其发送给交互器。
- 交互器使用工作者对请求做一些工作,构造一个响应对象,并将其发送给演示者。
- 展示者对响应中的数据进行格式化,构造一个视图模型对象并将其发送给视图控制器。
- 视图控制器将包含在视图模型中的结果显示给用户。
现在让我们更深入地看一下每个组件。
视图控制器
与交互器通信,并从演示者那里得到一个响应。
- 包含视图。
- 保持交互器和路由器的实例。
- 将视图的动作传递给交互器(业务逻辑),并将演示者的动作作为输入。
清洁的Swift ViewController
交互器
工作者和演示者之间的调解人。
- 包含一个场景的业务逻辑。
- 保持对presenter的引用。
- 根据输入(来自视图控制器)在工作者上运行动作,触发并将结果传递给演示者。
- 交互器不应该导入UIKit。
- Interactor也像Router一样包含两类协议:
1.业务逻辑协议 -- 在这个协议中声明所有的Interactor方法,这样它们就可以在ViewController中使用。
2.数据存储协议--所有应该保持其当前状态的属性都在此声明。这个协议主要用于Router中,在控制器之间传递数据。
清洁的Swift交互器
展示者
将交互器的结果格式化为一个ViewModel,并将结果传回给视图控制器。
- 保持对视图控制器的弱引用,这是presenter的一个输出。
- 在交互器产生一些结果后,它将响应传递给presenter。接下来,presenter将响应整理成适合显示的视图模型,然后将视图模型传回给视图控制器以显示给用户。
清洁的Swift演示器
工作者(s)
处理所有的API/数据库请求和响应。
- 一个抽象,处理不同的后台操作,如从核心数据中获取用户,下载个人资料照片,允许用户喜欢和关注,等等。
- 应该遵循单一责任原则(一个交互者可能包含许多具有不同责任的工作者)。
清洁的Swift工作器
模型
存储所有数据模型。
- 解耦的数据抽象。
- 包含
Request,Response, 和ViewModel数据模型。 - 请求有时可以是一个空结构(比如我们没有任何帖子参数或DB查询)。
- 每个数据模型都是为了在一个特定的组件中创建和使用:
Request。
Response: 在交互器中创建,在presenter中使用。
ViewModel: 在presenter中创建,在view controller中使用。
清洁的Swift模型
路由器
负责视图控制器之间的过渡和数据传递。
- 从视图控制器中提取导航逻辑。
- 保持对视图控制器的弱引用。
- 有两个协议声明:
1.路由逻辑协议 -- 所有用于路由的方法都保留在这个协议下。
2. 数据传递协议 - 包含需要传递给目标控制器的数据的协议。
Clean Swift Router
配置器
接受原始视图控制器并返回配置的视图控制器。
- 一个可选的组件,通过封装所有实例的创建并在需要的地方进行分配,承担起配置VIP循环的责任。