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

最近由於換工做的緣由沒有寫博客,如今慢慢穩定了,我準備寫一些關於Android 進階的文章,也是爲了督促本身學習,你們一塊兒進步!
今天詳細的分析一下Android APP架構之一:MVC算法

MVC簡介

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

你們有對MVC不瞭解的直接去百度百科,這裏就不作過多的講解了。數據庫

Android中的MVC

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

    • 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佈局控件mvc

(2)

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

public interface MyCommentListener {

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


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


}
(3)

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

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過於依賴

你們能夠關注個人微信公衆號:「秦子帥」一個有質量、有態度的公衆號!

公衆號

相關文章
相關標籤/搜索