Android MVC,MVP思想

 

 View強依賴於Model是MVC的主要問題。由此導致很多控件都是根據業務定製,從Android的角度來看,原本可以由一個通用的layout就能實現的控件,由於要綁定實體模型,現在必須要自定義控件,這導致出現大量不必要的重複代碼。因此有必要將View和Model進行解耦,而MVP的主要思想就是解耦View和Model。由此引入MVP就顯得很自然。

MVP存在的問題:

儘管已經有了大量的應用,但不可否認該模式的還是存在一些問題,這些問題在攜程的使用過程中也得到了體現。比如,上下文丟失問題,生命週期問題,內存泄露問題以及大量的自定義接口,回調鏈變長等問題。可以歸納爲:

1.業務複雜時,可能使得Activity變成更加複雜,比如要實現N個View,然後寫更多個模版方法。

2.業務複雜時,各個角色之間通信會變得很冗長和複雜,回調鏈過長。

3.Presenter處理業務,讓業務變得很分散,不能全局掌握業務,很難去回答某個業務究竟是在哪裏處理的。

4.用Presenter替代Controller是一個危險的做法,可能出現內存泄漏,生命週期不同步,上下文丟失等問題。

MVC的基本介紹

MVC全稱是Model - View - Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。MVC是一種框架模式而非設計模式,GOF把MVC看作是3種設計模式:觀察者模式、策略模式與組合模式的合體,而核心是觀察者模式。簡而言之,框架是大智慧,用來對軟件設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提高代碼複用率,降低耦合度。

使用 MVC,把業務邏輯抽離到 Controller 中,讓 View 層專注於顯示 UI。

1.MVC的優點

(1)首先就是理解比較容易,技術含量不高,這對開發和維護來說成本較低也易於維護與修改。

(2)耦合性不高,表現層與業務層分離各司其職,對開發來說很有利。

2.MVC的缺點

(1)完全理解MVC並不是很容易。使用MVC需要精心的計劃,由於它的內部原理比較複雜,所以需要花費一些時間去思考。同時由於模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。

(2)對於小項目,MVC反而會帶來更大的工作量以及複雜性。

2.MVC在Android 項目中的應用

M-------》Module  (大多對應於本地的數據文件或網絡獲取的數據體,很多情況下我們對這些數據的處理也會在這一層中進行)

V--------》View      (就是所謂的我們的視圖)

C---------》Controller  (就是我們的Activity)

個人認爲,MVC比較簡單,教於理解。但是你會發現你的整個項目完成之後,會特別亂。不像MVC,也不像MVP。

 

MVP介紹

MVP模式是MVC模式的一個演化版本,MVP全稱Model-View-Presenter。目前MVP在Android應用開發中越來越重要了。

在Android中,業務邏輯和數據存取是緊緊耦合的,很多缺乏經驗的開發者很可能會將各種各樣的業務邏輯塞進某個Activity、Fragment或者自定義View中,這樣會使得這些組件的單個類型臃腫不堪。如果不將具體的業務邏輯抽離出來,當UI變化時,你就需要去原來的View中抽離具體業務邏輯,這必然會很麻煩並且易出錯。

2.使用MVP的好處

(1)MVP模式會解除View與Model的耦合,有效的降低View的複雜性。同時又帶來了良好的可擴展性、可測試性,保證系統的整潔性和靈活性。

(2)MVP模式可以分離顯示層與邏輯層,它們之間通過接口進行通信,降低耦合。理想化的MVP模式可以實現同一份邏輯代碼搭配不同的顯示界面,因爲它們之間並不依賴與具體,而是依賴於抽象。這使得Presenter可以運用於任何實現了View邏輯接口的UI,使之具有更廣泛的適用性,保證了靈活度。

3.MVP模式的三個角色

(1)Presenter –------》 交互中間人:Presenter主要作爲溝通View與Model的橋樑,它從Model層檢索數據後,返回給View層,使得View與Model之間沒有耦合,也將業務邏輯從View角色上抽離出來。

(2)View --------》 用戶界面:View通常是指Activity、Fragment或者某個View控件,它含有一個Presenter成員變量。通常View需要實現一個邏輯接口,將View上的操作轉交給Presenter進行實現,最後,Presenter 調用View邏輯接口將結果返回給View元素。

(3)Model -------》數據的存取:Model 角色主要是提供數據的存取功能。Presenter 需要通過Model層存儲、獲取數據,Model就像一個數據倉庫。更直白的說,Model是封裝了數據庫DAO或者網絡獲取數據的角色,或者兩種數據方式獲取的集合。

 

最後給大家上幅圖更直觀的看出MVC,MVP 的架構:

 

從上圖可以看出:MVC的耦合性還是較高的,View可以直接訪問Model,導致3者之間構成了迴路。所以兩者的主要區別是,MVP中View不能直接訪問Model,需要通過Presenter發出請求,View與Model不能直接通信。

Android官方MVP架構解讀:https://github.com/googlesamples/android-architecture

感謝大家的觀看。有不同意的地方請指出,我好改正。希望大家一塊進步~ 謝謝

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