淺談Android Mvp模式開發及個人理解

MVP:Model View Present。

前言:抱着最起碼的要求盡力去做好每一件事 ——秋不白

終於理解了MVP,給大夥分享下,大神勿噴,小白專用。第一次寫博客好緊張,怎麼樣才能表現出經常寫博客的樣子,各位老鐵。

* Model: 處理數據
* View : 顯示數據(Activity或Fragment)
* Present: 連接Model層和View層
* Mvp 框架個人理解
*  1. 由View層發起請求(就是在View層裏面 調用present.getData() 方法啦,說的這麼高端)
*  2. 在present.getData()方法裏面,調用Model.getData()去執行數據請求,(就是所謂的  由Present層傳遞請求給Model層)
*  3. 然後,present回傳請求數據結果(成功就顯示數據,失敗就提示失敗)

下面直接看代碼

第一步,創建一個接口,具備兩個功能,一個是請求數據,一個是回傳數據

/**
 * 回調接口
 * Created by yinsxi on 2018/7/18.
 */

public interface MvpContact {
    interface Present{
        /**
         * 獲取數據
         */
        void getData();
    }
    interface View{
        /**
         * 展示數據
         */
        void showData();

        /**
         * 展示錯誤數據
         */
        void showError();
    }
}

第二步

還是一個接口,用來請求數據時,失敗或成功的回調

/**
 * 請求數據 回調
 * Created by yinsxi on 2018/7/18.
 */

public interface GetDataListenser {
    void onFailed();
    void onSuccess();
}

第三步

編寫你的數據請求類,也就是Model層,處理數據的

/**
 * Created by yinsxi on 2018/7/18.
 */

public class MvpModel {
    public void getData(GetDataListenser listenser){

        /**
         * 具體執行業務代碼
         * 此處省略一百行代碼
         * */


        /**
         * 根據最後請求結果
         * 失敗或成功回調
         */
        listenser.onFailed();
        listenser.onSuccess();

    }
}

第四步

編寫Present層,用來傳遞請求數據,和回傳數據

/**
 * Mvp 中的 Present層, 連接View層和Model層
 * 1. 傳遞數據請求
 * 2. 回傳 數據請求結果及數據
 * Created by yinsxi on 2018/7/18.
 */

public class MvpPresent implements MvpContact.Present{
    MvpContact.View view;
    MvpModel model;
    public MvpPresent(MvpContact.View view) {
        this.view = view;
        model = new MvpModel();
    }

    /**
     * 中間層傳遞請求
     */
    @Override
    public void getData() {
        model.getData(new GetDataListenser() {
            @Override
            public void onFailed() {
                view.showError();
            }

            @Override
            public void onSuccess() {
                view.showData();
            }
        });
    }
}

到這裏基本完成簡易MVP框架了,看看Activity如何使用,相信你應該知道了

public class MainActivity extends AppCompatActivity implements MvpContact.View{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化 Mvp 中的Present層
        MvpPresent mvpPresent = new MvpPresent(this);
        //由View層發起請求
        mvpPresent.getData();
    }

    @Override
    public void showData() {

    }

    @Override
    public void showError() {

    }
}

最後僅個人理解,可能存在失誤:

*     不必太過於在意是什麼框架mvp mvc,框架再怎麼變,也離不開,最根本的設計,就是封裝。
*      一個數據請求當然是放到單獨一個類裏面去執行,作爲activty只需要這個類回傳結果,失敗或成功。
*      當然了,遵循框架,有利於後期維護,一句話,寫出機器能懂得代碼很簡單,寫出人能看懂的代碼就很難,這是我兄dei佑哥對我說的
*      這要是衍生出各種框架的原因。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章