iOS VIP架构学习笔记

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

负责视图的展示

它作为Presenteroutput,从Presenter获取的ViewModel来对视图进行数据的赋值,ViewController本身不会对数据进行任何的处理,只会从ViewModel中获取,ViewModel给什么数据,它就展示什么数据。
同时它也作为Interactorinput,当用户与界面进行交互时,它就将这个事件和处理这个事件所需要的参数作为一个Request提供给Interactor,让Interactor来处理这个交互事件。

Interactor

处理用户与界面交互时产生的事件

它作为ViewControlleroutput,当ViewController与用户触发了交互事件,Interactor就会从ViewController提供过来的Request中获取必要的参数来进行处理(比如网络请求、数据库查询),其实它本身是一个事件处理的管理者,它底下还有很多为它服务的工人(Worker),例如负者网络请求的工人、数据库查询的工人,这些工人才是真正处理事件的基本单位(后面会有更详细的图片来好好介绍)。
同时它也作为Presenterinput,当工人获取了数据之后,将结果封装成一个Response然后提供给Presenter来处理。

Presenter

将数据处理成视图所要展示的内容

它作为Interactoroutput,将Interactor提供的Response进行处理,有时我们只需要Response其中的一些数据,或者将数据排序什么的一些处理,都在这里进行,处理完后将数据封装成ViewModel
同时它也作为ViewControllerinput,为ViewController展示视图时提供所必须的并且已经处理好的数据。

Worker

上面在介绍Interactor的时候也提到过了,它们是在Interactor里真正处理事件的基本单位,每个Worker有它们单一的职责。需要进行网络请求的任务,就调用负责网路请求的Worker,需要进行数据库更新或者获取的任务,就调用负责数据库处理的Worker,我们可以按事件类型来定义许多不同的WorkerWorker处理完后将处理回调给Interactor

Models

当在ViewController中与用户产生交互事件时,从ViewControllerInteractor再到Presentrt最后回到ViewController都会产生一系列的RequestResponseViewModel。而对于每个特定的事件,都有特定的RequestResponseViewModel,于是在Models中,我们会利用Swift独特命名空间的方式将每个事件定义一个命名空间,而这个事件的命名空间里包含了RequestResponseViewModel这三个Model

  • Request:网络请求或数据库查询所需要的一些参数。
  • Response:网络请求或数据库查询返回的一些数据。
  • ViewModel:将Response处理成视图需要展示的数据。

Router

路由器,顾名思义就是用来进行页面跳转的。在Router里面,我们需要根据根据情况是否通过segue跳转,或者通过StoryboardXIB来创建,或则直接通过代码创建,并且对新控制器进行初始化赋值,最后进行跳转。对于新控制器的初始化赋值我们是通过Router里面的DataStore属性来进行获取的,而作为这RouterDataStore就是Interactor,因为页面跳转也属于用户交互行为,是一个跳转事件,在跳转前需要做跳转前的处理,处理完后,Router在从Interactor获取数据来将控制器初始化。

iOS VIP架构学习笔记

 

 

参考Link:

  VIP简介:https://www.jianshu.com/p/956c34d5f7c8 

 

iOS VIP架构学习笔记

上一篇:C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!


下一篇:如何在移动端查看M站的项目