引言
这两天又把自己以前写的APP快速框架整理了一番,发现以前写的有些理解不是很到位,尤其是对Model的理解,所以这一次又重新理一下。
MVP
之前写MVP时,会首分一个http包,里面放网络相关东西,比如RetrofitClient、各种Response等等,然后在Presenter中进行数据获取,即网络接口的调用。
这种做法的好处是:
比较直观,容易理解
直接处理各种网络异常、数据异常等弊端:
网络加载都跟Presenter有关,代码复用性变低之后把自己原先理解的MVP做一次调整,把调用网络加载的的地方下方到Model中,可以使代码复用性更高。举例说明:
Model
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class UpdateInfoResponse extends BaseResponse { private UpdateInfo data;
public static void loadUpdateInfo(BaseSubscriber<UpdateInfoResponse> subscriber){ RetrofitClient.getInstance().updateInfo(subscriber); }
public UpdateInfo getData() { return data; }
public void setData(UpdateInfo data) { this.data = data; } }
|
Presenter调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public void checkVersion() { UpdateInfoResponse.loadUpdateInfo(new BaseSubscriber<UpdateInfoResponse>(){ @Override public void onNext(UpdateInfoResponse updateInfoResponse) { super.onNext(updateInfoResponse); if(!updateInfoResponse.isSuccess()){ LogUtils.eTag(TAG,updateInfoResponse.getMessage()); return; } if(hasNewVersion(updateInfoResponse.getData())){ getView().showNewVersion(updateInfoResponse.getData()); } }
@Override public void onError(Throwable e) { super.onError(e); } }); }
|
考虑到这么做是因为个人觉得Presenter的变动会比Model变动更大。
考虑到一些共性时,可在model中再封装一次回调,使调用者做更少的事情。
欢迎大家,一起来探讨技术!!!