因为工作关系,最近接触新的开发框架VIPER。
如上图,VIPER的全称为View,Interactor,Presenter,Entity,Router的五个模块的缩写。
1.各部分的职责如下:
View
-提供完整的试图,负责试图的的组合,布局,更新
-向Presenter提供更新视图的接口
-将View相关的事件发送给Presenter
结合ios编程,我们可以理解为这是为ViewController,负责了视图的布局和显示。
重要的是发生事件要传送给Presenter,比如用户点击刷新按钮时,ViewController需要调用Presenter去获取新的数据。
如果Presenter需要更新视图时,要提供给Presenter更新的接口。比如,Presenter获取到数据后,要能从Presenter接受到数据,并刷新视图。
Presenter
-接收并处理来自View的事件
-向Interactor请求调用业务逻辑
-向Interactor提供View中的数据
-接收并处理来自Interactor的数据回调事件
-通知View进行更新操作
-通过Router跳转到其他View
Interactor
-维护主要的业务逻辑功能,向Presenter提供现有的业务用例
-维护、获取、更新Entity
-当有业务相关的事件发生时,处理事件,并通知Presenter
可以发现主要的业务逻辑放入到Interactor。这部分已经脱离了与view的接触,可以理解好处在于方便测试和维护。
而处理view与业务逻辑的联系,在于Presenter。相当于中间加入一部分缓冲,负责处理展示逻辑和业务逻辑的联系。
因为iOS还是以视图为中心的。
Router
-提供View之间的跳转功能,减少了模块间的耦合
-初始化VIPER的各个模块
Entity
-和Model一样的数据模型
这部分就比较简单,Router是跳转时的处理逻辑。Entity可以理解为model
2.VIPER可以帮我们做什么:
首先VIPER是单个界面的框架,不是一个APP的设计框架。
在这个基础可以帮我们解决ViewController的代码臃肿的问题。
比如以前我都会用extension来不断的扩充代码,现在可以考虑把代码转移到Interactor这些专门类来实现。