概述
MVP简介(VIew-Model-Presenter)
Presenter整个功能的服务者,当用户通过界面(View)与应用进行交互或潜在交互时,界面将有效事件上报给Presenter,Presenter则根据事件需求进行处理,包括与数据(Model)之间的交互。形象来说就是:MVP就是一个非自助式餐厅,顾客就相当于我们的用户,餐厅本身相当于View,餐厅工作人员相当于Presenter,餐厅的食材相当于Model。用户与View进行交互时,相当于客户来到餐厅,此时会触发工作人员进行服务,有点餐操作时,Presenter获取Model数据,并呈现给用户。
MVP 优缺点
优点
降低代码的耦合度,便于团队协同开发,提高代码复用,简化代码逻辑结构
缺点
对开发人员代码编写有了更高的要求,各个模块的编写要更多的考虑重用性和耦合度,接口文件的加入增加了整体的代码量。在部分简单的界面编写时肯能会出现MVP逻辑比非MVP更复杂。
MVP 的准备工作
各模块的划分
M:根据项目复杂程度可直接使用JavaBean,亦或包含数据处理模块的JavaBeanManager
V:一般使用activity、fragment、dialog、popupwindow,亦可是自定义Layout,一般一个V至少对应一个P
P:单独定义的模块,完成界面和数据的交互
使用工厂模式 + 代理模式 实现框架封装
BaseView的定义
1、BaseViewActivity
package com.ww7h.common.mvp.views;
import com.ww7h.common.mvp.contracts.MvpContract;
import com.ww7h.ww.common.bases.activity.BaseActivity;
/**
* ================================================
* 描述:
* 来源: Android Studio.
* 项目名: Android-common-mvp
* 包名: com.ww7h.common.mvp.presenters
* 创建时间: 2019/5/5 20:21
*
* @author ww Github地址:https://github.com/ww7hcom
* ================================================
*/
public abstract class BaseViewActivity<P extends MvpContract.IPresenter>
extends BaseActivity<BaseViewActivity<P>> {
protected P iPresenter;
@Override
protected boolean getDesignPattern() {
return true;
}
@Override
protected void initContentView() {
super.initContentView();
setContentView(getContentView());
iPresenter = getPresenter();
}
/**
* 获取当前视图需要用到的的Presenter
* @return presenter
*/
protected abstract P get