VIPER与MVC系列架构的差异就在于VIPER拥有用于页面跳转的路由。
VIPER由五部分组成:View、Interacator、Presenter、Entity、Router
视图层(View):与MVP或者MVVM的视图层类似,它包含与UI相关的一切操作,接收用户的交互信息,但是并不处理,而是传递给展示层(Presenter)
展示层(Presenter):与MVP中的Presenter或是MVVM中的ViewModel功能类似,对于其更像MVP的Presenter还是更像MVVM中的ViewModel,取决于其中是否引入响应式编程框架。Presenter在这里只是响应并处理视图层传来的交互操作请求,并不直接对数据源进行修改,这是与其他架构模式最大的不同。若要修改数据,展示层会向其持有的数据管理层(Interactor)发送请求,Interactor会处理一切有关数据源的操作。此外,它还连接了路由层(Router)
路由层(Router):专门负责页面跳转和组件之间的切换。当App占用空间较小时,Router负责页面跳转。当App占用空间较大时,不同的功能和业务会被拆分为不同的模块或组件,Router就是在不同的组件之间进行切换。这是其他架构所忽略的部分
数据管理层(Interactor):专门负责处理数据源信息,包括网络请求、数据传输、缓存、存储、生成实例等操作。实际上,之前中间层和模型层的一些逻辑被进一步剥离至此,整个架构的逻辑也更加清晰。
模型层(Entity):只拥有初始化方法和属性相关的get/set方法,与之前的Model大同小异。
由于分工明确,VIPER层在代码分配、测试覆盖率上为所有架构之冠。
而VIPER的缺点在于,它依然与其他架构一样,是一个视图驱动的架构。同时,VIPER由于分工精细,不同层级之间交互大代码很多,总体代码量很大,不适宜用在小型App中