溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MVP架構(gòu)初識(shí)

發(fā)布時(shí)間:2020-07-08 15:41:58 來源:網(wǎng)絡(luò) 閱讀:507 作者:屠夫章哥 欄目:移動(dòng)開發(fā)

張鴻洋MVP

http://blog.csdn.net/lmj623565791/article/details/46596109


谷歌的MVP與一般的MVP的區(qū)別

https://www.jianshu.com/p/14283d8d3a60



MVP入門小demo:http://blog.csdn.net/l2show/article/details/46659027




我總結(jié)的MVP架構(gòu)圖:

MVP架構(gòu)初識(shí)


感悟1:MVP中的角色職責(zé)分工

  MVP與MVC最大的區(qū)別就是MVC中Activity或Fragment,它的Model和View互相產(chǎn)生聯(lián)系,也有可能是交叉產(chǎn)生聯(lián)系,比如說網(wǎng)絡(luò)請求數(shù)據(jù)、讀取數(shù)據(jù)庫任何這些和獲取Model相關(guān)的操作都放在了Activity和

Fragment中,這些就顯得十分的臃腫。

  MVP則通過Presenter,將Model的獲取從UI中分離出來,同時(shí)通過實(shí)現(xiàn)相應(yīng)的Interactor來獲取Model,再回調(diào)接口View的方法將InteractorImpl得到的數(shù)據(jù)回傳給UI組件。

  但是,MVP雖然比較優(yōu)秀,但是一開始會(huì)不適應(yīng)。因?yàn)镸VP真正的是面向接口編程。

  舉一個(gè)例子:在Activity里請求一個(gè)接口,得到一個(gè)List,然后展示到ListView上。

  mvc的做法和我說的順序是一樣的

  mvp的做法: 

     1)定義UI組件對應(yīng)的InterfaceView,定義方法void getData(List<Entity> list);

       》參數(shù)為需要得到的數(shù)據(jù)

       》一般InterfaceView里的方法是沒有返回值的,因?yàn)樗哪康脑谟谕ㄟ^Interactor得到

       list也就是Model。在UI組件里直接實(shí)現(xiàn)這個(gè)方法,至于list是怎么獲取的,UI組件就不

        用管了,只要展示到View上即可。

       》針對接口編程就是思維比較跳躍,不是按步就班的一步步去實(shí)現(xiàn)。將要做的事件通過抽象

        方法描述出來。

     2) 定義Interactor接口,定義獲取InterfaceView里所需要的Model的抽象方法。

       》參數(shù)為請求數(shù)據(jù)所需要的參數(shù)

    3)定義Presenter接口,Presenter相當(dāng)于InterfaceView與Interactor接口的紐帶。

      它里面定義的抽象方法,是連接InterfaceView與Interactor接口的。

      它的主要作用是執(zhí)行InterfaceView中定義的方法。


感悟2:Presenter怎么得到Interactor的數(shù)據(jù)

  1)Interactor采用同步的形式獲取數(shù)據(jù),那么直接在Interactor的接口上定義返回值即可。

  2)Interactor采用異步的形式獲取數(shù)據(jù),這是大多數(shù)的情況。除了數(shù)據(jù)之外,還有請求數(shù)據(jù)成功與

    否的狀態(tài),那Presenter如何實(shí)時(shí)得到數(shù)據(jù)呢?

    讓Presenter實(shí)現(xiàn)監(jiān)聽器接口,將Interactor構(gòu)造的時(shí)候傳入,然后在不同狀態(tài)下回調(diào)。一般回調(diào)

    方法是在UI線程中執(zhí)行的,注意線程問題。

  

感悟3:不要一味的使用MVP

 1)如果Model十分地簡單(如WebView的一個(gè)url),或者是一個(gè)簡單的SP配置變量等等,就沒有必要

   大張旗鼓地去為這個(gè)View再去創(chuàng)建Presenter和Interactor了。

  2)如果Model是通過Intent等傳遞給View的,也不需要MVP。


感悟4:在Presenter中實(shí)例化多個(gè)Interactor

   如果一個(gè)頁面中有多個(gè)網(wǎng)絡(luò)請求接口,可以在Presenter中實(shí)例化多個(gè)Interactor,每個(gè)Interactor負(fù)責(zé)處理一個(gè)接口,這樣體現(xiàn)了“單一職責(zé)”的設(shè)計(jì)原則。




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI