iOS页面架构模式:Clean Swift(VIP)

2022-07-03  本文已影响0人  时光啊混蛋_97boy

原创:知识探索型文章
创作不易,请珍惜,之后会持续更新,不断完善
个人比较喜欢做笔记和写总结,毕竟好记性不如烂笔头哈哈,这些文章记录了我的IOS成长历程,希望能与大家一起进步
温馨提示:由于简书不支持目录跳转,大家可通过command + F 输入目录标题后迅速寻找到你所需要的内容

目录


一、简介

iOS同学一定了解或使用过一些常用的iOS页面架构模式,比如MVCMVVMMVP,甚至是VIPER。当MVCMVVMMVP对于某些复杂页面不够用、而你又讨厌VIPER时,不妨试试Clean SwiftVIP)这种架构。本文将对此架构的原理和实践方式做一个详细的说明以帮助感兴趣的同学快速入门。

Clean Swift(也称作VIP) 最初是由 Raymond Law 在他的网站 clean-swift.com 上提出的。 其背后思想是在遵循 Uncle Bob 的Clean Architecture中的主要思想的同时,解决庞大视图控制器问题。

在使用Clean Swift模式时,我们可以将页面或页面上的某一模块看作一个场景。理论上,每个场景由大约6个组件构成:

其中,视图控制器(V)、交互器(I)和展示器(P)是 Clean Swift 的三个主要组件。 它们作为彼此的输入和输出,如下图所示:

视图控制器的输出连接到交互器的输入,交互器的输出连接到展示器的输入,展示器的输出连接到视图控制器的输入。 这意味着控制流和数据流始终是单向的。这被称为 VIP Cycle


二、VIP Cycle

Clean Swift 架构使用VIP Cycle来帮助你分离代码逻辑。VIP CycleViewControllerInteractorPresenter组成。ViewController 负责显示,Interactor 负责业务逻辑,Presenter 负责展示逻辑。

ViewController(视图控制器)

ViewController是在 VIP Cycle 中第一个触发动作的类。它的作用如下:

Interactor(交互器)

包含该场景所有的业务逻辑(这对编写单元测试好处极大,因为测试 Interactor时,该场景中所有的业务逻辑都经过了测试)。

注意:Interactor 不需要也不应该导入UIKit

Presenter(展示器)

接收到 Interactor 传递的 Response 后,Presenter 将原始数据转换成用于显示的 viewModel,然后将 viewModel 传递回 ViewController 以显示给用户。
保存对 ViewController(输出)的弱引用。

Worker(工作器)

当所有的业务逻辑都位于 Interactor 中时,可能会导致Interactor是一个非常大的类。 为了防止这种情况,一个Interactor 可以使用多个 WorkerWorkerInteractor 的助手,可以帮助接收数据。

注:如果你使用第三方SDK,比如使用 AFNetworking 做网络请求,而网络请求是在Worker里面做的,那么只需在 Worker 中引入AFNetworking

Router(路由器)

有可能存在当前场景的 ViewController 将展示另一个 ViewController 的情况。 在 Clean Swift中,ViewController 之间的导航是由 Router 完成的。

当屏幕或场景发生转换时,ViewController 需要向Interactor发起Request,然后 Interactor 需要向Presenter 进行询问,最终由 Presenter 来决定 ViewController 可以使用 Router 路由到哪一个 ViewController

Model

VIP Cycle 中,每个类在向该循环中的其他类进行请求动作时都会创建一个数据对象。 这样做的目的是解耦各个类。


三、总结

完整模式

ViewController 在初始化完成后,在内部创建 InteractorPresenterRouter实例,ViewController仅保存InteractorRouter 实例,将 Presenter 实例传递给 Interactor 来保存,并将ViewController作为弱引用传递给 PresenterRouter(防止循环引用)。

优点
缺点
总结

参考资料

上一篇 下一篇

猜你喜欢

热点阅读