1. 程式人生 > >Android進階之路(1)-詳解MVC

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

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

相關推薦

Android(1)-MVC

最近因為換工作的原因沒有寫部落格,現在慢慢穩定了,我準備寫一些關於Android 進階的文章,也是為了督促自己學習,大家一起進步!

Android(2)-MVP

MVP簡介 MVP 全稱:Model-View-Presenter ;MVP 是從經典的模式MVC演變而來,它們的基本思想有相通

資料庫事物與隔離級別

>這段時間忙於上線和重構、寫文章的是減少了很多,更新不得不變得遲緩起來~ ## 一、事務的特性 事務是指作為單個邏輯工作單元執行的一系列操作,**要麼都執行成功,要麼都執行失敗**。資料庫事物有四種特徵:即原子性、一致性、隔離性和永續性,也就是我們俗稱的 ACID 特性。事務處理可以確保除只有本事務單

javascript1

kobject 回顧 只有一個 變量 創建方式 驗證 spa 你知道 問題 路漫漫其修遠兮,吾將禿了頭依然不見大明湖畔的夏雨荷。 當年我還是個javascript小白,項目經理分下來一個驗證表單功能的任務,內容不多,僅需要驗證用戶名、郵箱、密碼等。 我一看so easy,於

小白的1

如何 存在 分享圖片 des 發送請求 界面 語句 需要 時間 在登陸的頁面中,需要一個表單,<form action="\goods\loginServlet" method="post" > 為什麽要有這個servlet? 答:需要將這個用戶填好的表單交給

Android - 常見小問題

此篇以後主要記錄我在開發中遇到的問題,用於自我筆記~ APP崩潰,導致一級頁面的fargmentUI層疊 解決方式: /**重寫依賴的activity內onSaveInstanceState 方法 ; 但是格外注意: 註釋呼叫父類方法(如文內的super.

Android

此篇文章隨就業時間而成長~ 1.特殊字元轉義 單引號 ' &apos; 雙引號 " &quot; 大於號 > &gt; 小於號 &l

Android——AIDL

一、AIDL AIDL(Android Interface Definition Language)android介面定義語言,它可以用於讓某個service與多個應用程式元件之間進行跨程序通訊,從而可以實現多個應用程式共享一個service的

Android(一) -- AS 3.0NDK環境搭建及hello world

通過一段找實習的經歷,以及快應用、小程式、web app等移動開發模式的衝擊,深深為安卓原生開發的未來感到擔憂,希望接入人工智慧API和物聯網井噴能給安卓開發帶來新的生機吧。當然,作為小白我是不用擔心這麼多的,做自己喜歡的事就好了,於是拋開雜念,繼續學習安卓。NDK開發環境的

Android(三) -- JNI互動

今天繼續學習C與Java通過JNIEnv互動。昨天學習了C與Java互動方法,但感覺太輕鬆了,就像呼叫findViewById一樣簡單,可能是我遺漏了什麼東西,於是就想在今天繼續研究這一塊兒的內容,順便做一下總結。C呼叫Java的方法和訪問Java中的變數都是通過JNIEnv

Android(二) -- NDK初探

繼續學習NDK開發,今天來實現一個簡單的計算器功能,NativeUtil類中有一個靜態的native方法,它接收三個引數,分別是兩個運算元和一個操作符,並且返回C的計算結果。NativeUtil類定義如下public class NativeUtil { static

Android

我們獲取的IP分區域網與外網,本篇帶來的就是外面ip的獲取方式 注意:許可權新增 (最好以下許可權都進行配置) <uses-permission android:name="android.permission.WRITE_EXTERNAL

Android——NDK(二)

  上一篇部落格介紹了NDK簡介和環境的搭建以及一個簡單的Demo,這篇準備總結一下JNI呼叫Java物件以及在JNI中開啟執行緒。   ps:這裡說明一下,我是用Android Studio開發的,如果是用Eclipse開發的朋友,是不能直接匯入我的程式,而

Android (我的部落格文章目錄)

為了方便讀者閱讀以及自己回顧,總結寫過的文章和一些想要寫的文章目錄如下: #1.Java 反射: 集合: 異常 IO / NIO #2.資料結構與演算法 資料結構: 演算法: #3.設計模式 #4.架構設計 MVC 的思路與實現 MVP 的

淺談Android

熱文導讀 | 點選標題閱讀作者:斜槓Allen地址:http://www.apkbus.com/

Scala-面向對象編程之類的成員

object 創作 構造器 就是 span 進階 作品 strong scala            Scala進階之路-面向對象編程之類的成員詳解                                作者:尹正傑 版權聲明:原創作品,謝絕轉載!否則將追究法律責

Android資深工程師

看到一篇文章中提到“最近幾年國內的初級Android程式設計師已經很多了,但是中高階的Android技術人才仍然稀缺“,這的確不假,從我在百度所進行的一些面試來看,找一個適合的高階Android工程師的確不容易,一般需要進行大量的面試才能挑選出一個比較滿意的。為什麼中高階Android程式設計師不多呢?這是一

從0到1,從無到有:八年阿里Python開發工程師的

如果你只能選讀一門程式語言,那麼除了 Python,還是 Python。     小編有個在阿里工作的朋友,這兩天和他在聊Python的發展,其實Python已經在不知不覺中發生了非常大的改變。Python這門語言十分高效,只要是和自動化有關係的,它可以發揮出巨

Android程式設計師的

本文主要論述的是Android程式設計師的進階之路,博主本人就是一名android開發攻城獅,所以這裡講述的大多數是android開發攻城獅的技術進階之路,如有問題請多指正。 大家都知道程式設計師之中有有菜鳥程式設計師和大神之分,這裡我這暫時把android程式設計師分為幾

從業程式設計生涯十年,你要了的程式設計師養生之道,以及

作為一個從業快10年的程式設計師,我想給新入行的程式設計師們一些建議。這些建議是我希望自己可以在畢業時就讀到的,也希望它們可以幫助你成為一個更好的程式設計師。文末有資料分享。   簡單歸納一下,總共有7條: 保持健康 程式設計之外的愛好 持續學習 正確應對犯錯 不