通过学习清洁架构快速编写清洁的Swift

509 阅读4分钟

通过学习清洁架构快速编写清洁的Swift

在短时间内学习干净的Swift架构基础知识。

还记得那些日子,我们这些iOS开发者花了几小时几十天来学习MVVM吗?现在我相信早晚有一天,我们会到处寻找学习和掌握清洁架构的机会。
那么我们为什么不从今天开始呢?

在这篇文章中,我将告诉你什么是Clean Architecture,你可以快速了解它的许多东西。

关于Clean Swift架构

Clean Swift(简称VIP)是鲍勃叔叔的清洁架构,适应于iOS和macOS项目。用于编写干净的Swift代码的VIP架构是由Raymond Law提出的。
正如你可能知道的,VIP代表视图-交互器-呈现器。

这个架构中的项目结构是围绕场景建立的。一个场景应该有这些组件。

  • 视图控制器
  • 交互器
  • 演示者
  • 工作者
  • 模型
  • 路由器
  • 配置器(可选)

换句话说,我们将有一套适用于每个场景的组件,为我们的控制器服务。

VIP周期

  1. 视图控制器接受一个用户事件,构造一个请求对象,并将其发送给交互器。
  2. 交互器使用工作者对请求做一些工作,构造一个响应对象,并将其发送给演示者。
  3. 展示者对响应中的数据进行格式化,构造一个视图模型对象并将其发送给视图控制器。
  4. 视图控制器将包含在视图模型中的结果显示给用户。

现在让我们更深入地看一下每个组件。

视图控制器

与交互器通信,并从演示者那里得到一个响应。

  • 包含视图。
  • 保持交互器和路由器的实例。
  • 将视图的动作传递给交互器(业务逻辑),并将演示者的动作作为输入。

清洁的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循环的责任。