日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MVP介绍以及优化封装

發布時間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVP介绍以及优化封装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????? 近期把項目工程給換了一個架構,原來是用的是mvc ,現在轉換為MVP模式,略有心得,給大家分享一下。mvp優缺點都比較明顯,希望大家都能理解,不要為了用MVP而用MVP。

MVP的優點:代碼復用,條理清晰等等。不過在程序元來說MVP最大的優點還是代碼解耦,邏輯清晰,至于代碼復用,暫時沒有感覺很好用,除非是界面和邏輯基本一樣的,不然想要復用,其實不太現實。

  • MVP的缺點:會多出許多類,增加了項目的復雜程度,而且像某些邏輯及其簡單,事件較少的界面,使用MVP實際上反而是累贅,明明用MVC也就幾十行代碼的事,改成MVP多了好多個類,反而感覺不劃算,改需求時又要翻閱好多個類。因此,我建議大家,如果你的某個界面極其簡單,其實就不要用MVP了,MVP是邏輯越復雜,優勢越明顯,邏輯簡單時,反而不如MVC好用。下面簡單介紹一下mvc 以及mvp




  • 下面來談談文章主題,MVP的優化問題,最開始采用網上大家的寫法,發現代碼的復用性不好,有些邏輯類似的代碼,基本上每個presenter 和model都要重新寫,于是想到使用Base類的方法,把某些共有的方法抽離以達到代碼的復用性,類似于BaseActivity。

    舉個例子比如網絡請求,在MVC中通常是把網絡請求封裝在BaseActivity中,不過既然是MVP,網絡請求自然應該封裝在Model里面啦

    public abstract class BaseActivityModel implements IPublicModel {//網絡連接模式,當一個頁面含有多個網絡請求時,通過傳入不同的模式,選擇相應的加載參數 public static final int MODE_ONE=1; public static final int MODE_TWO=2; public static final int MODE_THREE=3; //網絡連接工具接口類 protected InternetConnect mConnect; /** * @param mode 請求模式 * @param intent 上個頁面傳遞過來的intent * @param i 請求回調 * @param parameter 請求的一些參數 */ @Override public void requestData (int mode, Intent intent, JsonI i, String... parameter) {HashMap<String, String> map = new HashMap<>(); JsonBean.Payload payload=new JsonBean.Payload(); mConnect.loadParameter(intent,mode,payload,map,parameter);//加載參數,由子類實現 map.put("payload", VolleyConnect.getGson().toJson(payload)); VolleyConnect.getInVolleyConnect().getServiceMsg( map,i);//封裝Volley,傳入參數以及回調接口 }/** * 設置網絡請求 */ @Override public void setMConnect (InternetConnect mConnect) {this.mConnect=mConnect; } } 同樣的共有的方法和字段抽象出presenter的基類 public abstract class BaseActivityPresenter<T extends IPublicView, E extends IPublicModel> implements IPublicPresenter {protected T view; protected E model; protected RequestResult mRequestResult; protected Handler mHandler; public BaseActivityPresenter (T view) {this.view = view; Type type = getClass().getGenericSuperclass();//使用反射實例化Model Type trueType = ((ParameterizedType) type).getActualTypeArguments()[1]; try {this.model = ((Class<E>) trueType).newInstance(); } catch (InstantiationException e) {e.printStackTrace(); } catch (IllegalAccessException e) {e.printStackTrace(); }new TimeCount(200, 50, new ITimeCount() {@Override public void isRuning (long millisUntilFinished) {}@Override public void isFinish () {init();//加載子類方法,延時200毫秒加載 }}).start(); }/* 設置網絡請求回調 */ public void setRequestResult (RequestResult requestResult) {mRequestResult = requestResult; }/* 獲取view的handler,需要傳入一個回調接口 */ public void setHandler (IHandler handlerI) {mHandler = view.exposeHandler(handlerI); }@Override public void requestData (final int mode, String... parameter) {view.setLoading(true); model.requestData(mode, view.exposeIntent(), new JsonI() {@Override public void notice (JsonBean bean) { // if (bean.getStatus().equals("0")) { // mRequestResult.requestDataSuccess(mode,bean); // }else{ // mRequestResult.requestDataFail(mode,bean); // } view.setLoading(false); }@Override public void notice (int error) {view.showError(error); }}, parameter); } }

    這樣我們就可以更加簡單方便的使用MVP模式了,下面是使用示例

    public class LoginPresenter extends BaseActivityPresenter<ILoginView,LoginModel> implements ILoginPresenter, RequestResult {public LoginPresenter (ILoginView view) {super(view); }@Override public void init () {setRequestResult(this); }@Override public void requestDataSuccess (int mode, JsonBean bean) {}@Override public void requestDataFail (int mode, JsonBean bean) {} } 可以看到,LoginPresenter不再需要去寫model字段和網絡請求邏輯,通過泛型,可以自動創建model,而網絡請求,僅僅需要設置對應的回調就可以噠。

    總結,這樣做進一步降低了代碼耦合,方便以后代碼維護,而且整個MVP感覺更加簡單。

    總結

    以上是生活随笔為你收集整理的MVP介绍以及优化封装的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产福利合集 | 台湾swag在线播放 | 亚洲一二三区av | 国产女同视频 | 视频在线观看一区二区三区 | 久久艹在线视频 | 久久午夜精品 | 精品久久人人妻人人做人人 | 在线a天堂| 欧美大片网站 | 成人精品一区二区三区视频 | 欧美少妇一区二区 | 在线综合网 | 一边摸内裤一边吻胸 | 91av爱爱| 最近更新中文字幕 | 亚洲成人高清 | 两性视频久久 | av在线播放网址 | 中文字幕精品一区二区三区视频 | 日本xxxxxxxxx18| 成人特级毛片69免费观看 | 国产又爽又黄的激情精品视频 | 日本不卡一区二区三区在线观看 | 欧美18av| 污视频在线播放 | 亚洲精品伦理 | 超碰在线视屏 | 高贵麻麻被调教成玩物 | 男女免费看 | 国产高潮视频 | 久久精品欧美一区二区三区麻豆 | 极品美女无套呻吟啪啪 | 日韩欧美一区二区视频 | 国产精品久久久久久久久久久不卡 | 欧美成人极品 | 精品国产人妻一区二区三区 | 草莓视频在线观看入口w | 色小说综合| 大肉大捧一进一出好爽动态图 | 婷婷九月| 最新黄色在线 | 国产一级性生活 | 免费毛片一级 | 老熟女一区二区三区 | 日韩社区 | 欧美色图首页 | 国产精品自产拍在线观看 | 亚洲天堂首页 | 美女隐私无遮挡 | 国产1区二区 | 国产性一乱一性一伧一色 | 天天插天天操 | 久久久久久片 | 欧美丰满一区二区免费视频 | 精品国产一区二区三区性色 | 免费看成年人视频 | 国产精品桃色 | 天天噜夜夜噜 | 99爱视频在线 | 丰满肥臀噗嗤啊x99av | 一区二区三区 中文字幕 | 欧美日韩成人一区 | 性色欲情网站iwww九文堂 | 国产一二三四五区 | 精品一二三四区 | 久久精品亚洲一区二区 | 视频在线观看你懂的 | 国产亚洲福利 | 国产剧情在线一区 | 可以在线观看的av网站 | 免费黄网站在线观看 | 精品人伦一区二区三电影 | 在线观看污视频网站 | 国产成人久久婷婷精品流白浆 | 男人操女人免费视频 | 日日草夜夜草 | 视频在线一区二区 | 日本在线观看一区 | 亚洲三级免费 | 黄色片免费观看视频 | 成人黄色大全 | 在线免费国产视频 | 美女免费黄色 | 久久一本精品 | 中文字幕久久久久 | 韩国中文三级hd字幕 | 粗喘呻吟撞击猛烈疯狂 | 中文字幕在线精品 | jizzjizz日本免费视频 | 人人精品久久 | 亚洲性综合 | 日本老太婆做爰视频 | 久久精品区 | 国产免费又粗又猛又爽 | 91久久精品一区二区三区 | 三级av片 | 国产中文字幕在线观看 | 国产九色在线播放九色 |