前言
在Android项目开发中,MVP架构的使用或许已经不是什么新鲜的事,现在网上的教程也非常多,而且Google也在GitHub上给出了实例。
不过有时候在项目开发过程中,也不完全照搬别人是怎样写的,重要的是自己理清MVP架构的思想,通过代码的封装,搭建合适自己开发常用的模式。(本文不会讲解什么是MVP架构,如果还没熟悉这种架构模式,请自行百度或谷歌咯)
接下来谈谈我是怎样通过代码封装来搭建合适我自己的MVP构架吧。
MVP架构模式的父类实现
- BaseView
View层的父类。将常用的View层操作抽象出来,写成一个接口,具体的实现由Activity或Fragment来完成。
例如,在View层上,通过网络请求数据然后展示数据这样的一个过程,一般我是分成这几个步骤:
1. 网络请求开始前,需要打开数据加载框
2. 网络请求结束后,需要关闭数据加载框
3. 网络请求成功后,需要在view上显示数据
4. 网络请求失败后,需要在View上提示原因
转换成代码:
public interface BaseView<T> {
/**
* 打开加载框
*/
void startLoadView();
/**
* 关闭加载框
*/
void stopLoadView();
/**
* 网络请求成功后回调
* @param data
*/
void onSuccess(T data);
/**
* 网络请求失败后回调
* @param msg
*/
void onFail(String msg);
}
- BaseRequestCallBack
数据请求的回调接口(我这里一般都是都过网络请求数据),在MVP架构模式中,Model层获取到数据后,会将数据交给Presenter中间层,最后再交回给View层,而在View层上的一些常用的操作,例如上面的讲解中提到的相对应,在不同的请求周期中对应不同的操作,而接口的具体的实现由Presenter层来完成。
public interface BaseRequestCallBack<T> {
/**
* 网络请求开始前回调
*/
void RequestBefore();
/**
* 网络请求失败后回调
*/
void RequestFail(String msg);
/**
* 网络请求成功后回调
* @param data
*/
void RequestSuccess(T data);
/**
* 网络请求结束后回调
*/
void RequestComplete();
}
- BasePresenter
Presenter层的父类,是Model层和View层之间的桥梁。上面说到的BaseRequestCallBack接口就是由BasePresenter来实现。
因为Presenter层是中间层,所以要持有View层的引用,继而完成数据的传递和完成不同的请求周期中对应View层的操作。
看看BasePresenter的代码:
public class BasePresenter <T> implements BaseRequestCallBack<T> {
private BaseView mView; //持有View层的引用
public BasePresenter(BaseView mView, Context context) {
this.mView = mView;
}
/**
* 以下的回调方法对应View层的相应操作
*/
@Override
public void RequestBefore() {
mView.startLoadView();
}
@Override
public void RequestFail(String msg) {
mView.onFail(msg);
}
@Override
public void RequestSuccess(T data) {
mView.onSuccess(data);
}
@Override
public void RequestComplete() {
mView.stopLoadView();
}
}
- BaseModel
Model层的父类。一般得看开发者的需要,通过怎样的方式或框架去获取数据,然后进行相应的实现或参数的配置(网络请求框架,数据库框架等)
因为获取数据后,Model层需要将数据传递给Presenter层,所以在Model层需要持有Presenter层的引用。在这里,BaseRequestCallBack就可以派上用场了,直接可以对应网络请求框架的一些生命周期。
因为这里不同的开发者使用的网络请求方式不一样,所以这里我就贴出创建BaseRequestCallBack实例的代码。下面的注释掉的代码,就是我自己通过OKHTTP封装的网络请求框架。
public class BaseModel {
//public NetworkRequestClient httpClient;
private BaseRequestCallBack callBack;
public BaseModel(BaseRequestCallBack callBack) {
//httpClient = NetworkRequestClient.getInstance();
this.callBack = callBack;
}
// public NetworkExecutor getExecutor(Class<?> mClass) {
// NetworkExecutor networkExecutor = new NetworkExecutor(new NetworkRequestListener() {
// @Override
// public void onRequestBefore() {
// callBack.requestBefore();
// }
// @Override
// public void onRequestSuccess(Object object) {
// callBack.requestSuccess(object);
// }
// @Override
// public void onRequestFail(String msg) {
// callBack.requestFail(msg);
// }
// @Override
// public void onRequestComplete() {
// callBack.requestComplete();
// }
// },mClass);
// return networkExecutor;
// }
}
总结
这就是我通过代码封装搭建的一套MVP开发架构模式,当然每个人都可以持有不同的见解,这里只是提出我的一些做法,如有做的不好,还望指点。我就不贴具体的Activity的代码了,如果需要的话可以,去我的Github上拿。
最后,小弟不才,还望多多指教!
网友评论