一、概念
MVP分为三个部分:Model(数据)、View(界面)、Presenter(交互中间人)
MVP是MVC的变种,强调Model层和View层的最大化解耦。
二、模型图
Model(数据):
负责数据的来源和封装,比如网络请求、数据库操作等。如果有必要则提供接口暴露自己处理数据的状态和进度。
Model层提供接口,实现功能,供Presenter层调用。
View(界面):
负责界面相关操作,比如布局界面的初始化、各种listener的设置、更新界面等。View层包括布局文件、Activity和Fragment等。
View层一般会持有Presenter层的引用,可以通过构造方法注入或者普通方法注入的方式获得Presenter层的实例,并将非界面的业务逻辑交给Presenter层处理。
View层提供接口,实现功能,供Presenter层调用。
Presenter(交互中间人):
处理非界面的业务逻辑,让Activity和Fragment只负责处理界面,符合单一职责原则。
Presenter层提供接口,实现功能,供View层调用。
三、工作流程
View层向Presenter层发出数据加载请求,Presenter层调用Model层的接口请求数据,当Model层处理完毕会直接返回结果给Presenter层,Presenter层调用View层的接口实现界面的刷新。
四、问题
由于我们使用了接口的方式去连接View层和Presenter层,这样就导致一个问题,如果有一个逻辑很复杂的界面,即有很多个View,每个View对应一个Presenter,这样的话接口就会有很多,维护接口的成本就会非常大。
五、使用场景
对于简单应用,使用MVP比较麻烦,因为要定义的接口较多。
但是对于复杂应用,MVP是一种良好的架构模式,它能够使应用层次分明。