說到MVP就不得不提到MVC,做過J2EE的猿友們肯定知道MVC是個什么東西。MVC即 Model、View、Controller, 那MVP就Model、View、Presenter。Model用于提供數據模型,View用于顯示數據,當然Presenter也就用來處理業務邏輯并將數據顯示數據到View上了,它是Model和View的橋梁。
題外話,其實在15年的時候,我們公司的項目就采用mvp,當時沒時間寫,最近看時間不緊,就分享下
我將整個項目分為三個Module,如下圖
? ? ?
其實這種結構我是不太喜歡的,我喜歡在app的根目錄下,新建一個liabary文件,這里放第三方的庫工程;
一、數據處理模塊domain(包含Model),這里的domain命名只是我喜歡這樣把數據處理相關的東西都放在這里。
? ? ??
? ? ? ServiceManager用于向外提供數據的入口(其他類代碼在前面博文中已提及)
- package?com.micky.retrofitrxandroiddragger2.domain.service;??
- ??
- import?retrofit.GsonConverterFactory;??
- import?retrofit.Retrofit;??
- import?retrofit.RxJavaCallAdapterFactory;??
- ??
- ?
- public?class?ServiceManager?{??
- ????private?static?final?String?ENDPOINT?=?"http://ip.taobao.com";??
- ??
- ????private?static?class?ServiceManagerHolder?{??
- ????????private?static?final?ServiceManager?INSTANCE?=?new?ServiceManager();??
- ????}??
- ??
- ????private?ServiceManager()?{}??
- ??
- ????public?static?final?ServiceManager?getInstance()?{??
- ????????return?ServiceManagerHolder.INSTANCE;??
- ????}??
- ??
- ????private?ApiService?mApiService?=?null;??
- ??
- ????public?ApiService?getApiService()?{??
- ????????if?(mApiService?==?null)?{??
- ????????????Retrofit?retrofit?=?new?Retrofit.Builder()??
- ????????????????????.baseUrl(ENDPOINT)??
- ????????????????????.addConverterFactory(GsonConverterFactory.create())??
- ????????????????????.addCallAdapterFactory(RxJavaCallAdapterFactory.create())??
- ????????????????????.build();??
- ????????????mApiService?=?retrofit.create(ApiService.class);??
- ????????????return?mApiService;??
- ????????}??
- ????????return?mApiService;??
- ????}??
- }??
注:我們在這個manager里面主要做一些網絡請求,業務處理,數據組裝...
二、View和Presenter模塊
? ? ? 為了方便管理我將View和Presenter相關類都放在Presentation模塊中
?
View接口
-
- public?interface?MainView?{??
- ????void?showProgress();??
- ????void?hideProgress();??
- ????void?setIpText(String?text);??
- }??
-
Presenter接口
- package?com.micky.retrofitrxandroiddragger2.presenter;??
- ??
-
- public?interface?MainPresenter?extends?BasePresenter?{??
- ????void?getIpInfo(String?ip);??
- }??
Presenter實現類