Android進階之路(1)-詳解MVC

最近因爲換工作的原因沒有寫博客,現在慢慢穩定了,我準備寫一些關於Android 進階的文章,也是爲了督促自己學習,大家一起進步!
今天詳細的分析一下Android APP架構之一:MVC

MVC簡介

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。

大家有對MVC不瞭解的直接去百度百科,這裏就不做過多的講解了。

Android中的MVC

  • M層:適合做一些業務邏輯處理,比如數據庫存取操作,網絡操作,複雜的算法,耗時的任務等都在model層處理。

  • V層:應用層中處理數據顯示的部分,XML佈局可以視爲V層(雖然很牽強)

  • C層:在Android中,Activity處理用戶交互問題,因此可以認爲Activity是控制器,Activity讀取V視圖層的數據

MVC每層都有了解後,再對它構建一個導向圖

我們爲什麼要用MVC?

我們在寫項目的時候activity太臃腫,需要把View與Model進行分離,這樣的好處:
1.耦合性低,利用MVC框架使得View(視圖)層和Model(模型)層可以很好的分離
2.方便維護
3.不用重複的寫相同的業務邏輯,實現Model與Model之間的調用,Controller也可以直接調用Model 來實現代碼複用

從實例中強化了解MVC

以之前做過的一個需求舉例吧,“獲取我的評論列表” 目的就是獲取評論的數據,並顯示出來

步驟:
(1)

XML視圖佈局我這裏就不再寫了,無非就是按鈕、列表控件以及需要更新的item佈局控件

(2)

爲了實現View模塊與Model的交互 (也就是Model執行完業務邏輯之後,需要通知給View去展示數據) 我們需要定義一個MyCommentListener

public interface MyCommentListener {

    /**
     * 加載我的評論列表成功的回調
     */
    void onMyCommentSuccess(MyCommentBean s);


    /**
     * 加載我的評論列表失敗的回調
     */
    void onMyCommentFailure();


}

(3)

Controller與Model交互,也就是C層告訴M層獲取評論的請求, 它們之間的聯繫通過MyCommentModel

public interface MyCommentModel {

    /**
     * 獲取我的評論列表信息
     */
    void getMyCommentInfo(List<MyCommentBean.ResultBean> list, String page, MyCommentListener myCommentListener);


}
(4)

實現獲取評論列表的邏輯,這很顯然是M層

public class MyCommentModelImpl implements MyCommentModel {


    /**
     * 獲取我的評論列表
     * @param list
     * @param myCommentListener
     */
    @Override
    public void getMyCommentInfo(final List<MyCommentBean.ResultBean> list, final String page, final MyCommentListener myCommentListener) {

        //加載數據
        NetService.getInstance().rxJavaGetMyComment(Constans.USER_ID,page,"10")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new BaseSubscriber<MyCommentBean>() {

                    @Override
                    public void handlerSuccess(MyCommentBean s) {
                  
                            myCommentListener.onMyCommentSuccess(s);

               
                    }

                    @Override
                    public void onFailure() {
                        myCommentListener.onMyCommentFailure();
                    }
                });
    }
}
(5)

Activity或者Fragment實現MyCommentListener接口,看一下具體的回調:

 /**
     * 加載數據成功的回調
     */
    @Override
    public void onMyCommentSuccess(MyCommentBean s) {
//View做一些更新或者顯示的操作
    }

    /**
     * 加載數據失敗的回調
     *
     * @param type
     */
    @Override
    public void onMyCommentFailure() {
      //View做一些更新或者顯示的操作  
    }

總結

1.mvc提高了代碼的重用性
1.Model與Model之間可以調用,Controller也可以無障礙直接調用Model
2.Activity或者Fragment中 包含了C層和V層,界面分割的不是很清晰,過於緊密了…
3.View對Model過於依賴

大家可以關注我的微信公衆號:「秦子帥」一個有質量、有態度的公衆號!

公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章