VIP(ViewController-Interactor-Presenter)架构:
此结构适用场景:版本迭代更新频繁,功能复杂,开发人员不固定,难以测试和维护。在测试维护时,对于出错的部分可以更快的定位到错误代码。对于中途接手项目的人可以更好的理解这个模块的组成。
Clean Swift(https://clean-swift.com/clean-swift-ios-architecture/):
Xcode的VIP开发模版,提供了ViewController、Interactor、Presenter、Worker、Router和Model的模版,其中Scene可以创建出完整的VIP结构。
ViewController
负责视图的展示
它作为Presenter的output,从Presenter获取的ViewModel
来对视图进行数据的赋值,ViewController本身不会对数据进行任何的处理,只会从ViewModel
中获取,ViewModel
给什么数据,它就展示什么数据。
同时它也作为Interactor的input,当用户与界面进行交互时,它就将这个事件和处理这个事件所需要的参数作为一个Request
提供给Interactor,让Interactor来处理这个交互事件。
Interactor
处理用户与界面交互时产生的事件
它作为ViewController的output,当ViewController与用户触发了交互事件,Interactor就会从ViewController提供过来的Request
中获取必要的参数来进行处理(比如网络请求、数据库查询),其实它本身是一个事件处理的管理者,它底下还有很多为它服务的工人(Worker),例如负者网络请求的工人、数据库查询的工人,这些工人才是真正处理事件的基本单位(后面会有更详细的图片来好好介绍)。
同时它也作为Presenter的input,当工人获取了数据之后,将结果封装成一个Response
然后提供给Presenter来处理。
Presenter
将数据处理成视图所要展示的内容
它作为Interactor的output,将Interactor提供的Response进行处理,有时我们只需要Response其中的一些数据,或者将数据排序什么的一些处理,都在这里进行,处理完后将数据封装成ViewModel。
同时它也作为ViewController的input,为ViewController展示视图时提供所必须的并且已经处理好的数据。
Worker
上面在介绍Interactor的时候也提到过了,它们是在Interactor里真正处理事件的基本单位,每个Worker有它们单一的职责。需要进行网络请求的任务,就调用负责网路请求的Worker,需要进行数据库更新或者获取的任务,就调用负责数据库处理的Worker,我们可以按事件类型来定义许多不同的Worker。Worker处理完后将处理回调给Interactor。
Models
当在ViewController中与用户产生交互事件时,从ViewController到Interactor再到Presentrt最后回到ViewController都会产生一系列的Request
、Response
和ViewModel
。而对于每个特定的事件,都有特定的Request
、Response
和ViewModel
,于是在Models中,我们会利用Swift独特命名空间的方式将每个事件定义一个命名空间,而这个事件的命名空间里包含了Request
、Response
和ViewModel
这三个Model
。
- Request:网络请求或数据库查询所需要的一些参数。
- Response:网络请求或数据库查询返回的一些数据。
- ViewModel:将Response处理成视图需要展示的数据。
Router
路由器,顾名思义就是用来进行页面跳转的。在Router里面,我们需要根据根据情况是否通过segue
跳转,或者通过Storyboard
或XIB
来创建,或则直接通过代码创建,并且对新控制器进行初始化赋值,最后进行跳转。对于新控制器的初始化赋值我们是通过Router里面的DataStore
属性来进行获取的,而作为这Router的DataStore
就是Interactor,因为页面跳转也属于用户交互行为,是一个跳转事件,在跳转前需要做跳转前的处理,处理完后,Router在从Interactor获取数据来将控制器初始化。
参考Link:
VIP简介:https://www.jianshu.com/p/956c34d5f7c8