Android產品研發(二十五)-->MVC/MVVM/MVP簡單理解

轉載請標明出處:一片楓葉的專欄

上一篇文章中我們講解了關於Android開發過程中常見的內存泄露場景與檢測方案。Android系統爲每個應用程序分配的內存是有限的,當一個應用中產生的內存泄漏的情況比較多時,這就會導致應用所需要的內存超過這個系統分配的內存限額,進而造成了內存溢出而導致應用崩潰。在實際的開發過程中我們由於對程序代碼的不當操作隨時都有可能造成內存泄露。具體更多關於Android常見內存泄露與檢測的內容可參考我的上篇文章。

本文我們將講解Android開發中常常涉及到的MVC/MVP/MVVM等模式的基本概念。許多童鞋對Android開發中涉及到的MVC、MVP、MVVM這三種模式不是太清楚,我認爲無論是MVC、MVP亦或者是MVVM都是一種代碼組織方式,通過這種代碼組織方式能夠讓代碼更有層次感,各個層次主要負責各自的工作,這樣降低了整個項目的代碼邏輯耦合度與可讀性。

下面對MVC、MVP、MVVM等設計模式逐一的做一下說明:

MVC開發模式:

MVC,即Model層,View層,Control層,在JAVAEE中MVC是一種經典的開發模型,下面是引用的一段對其的說明:

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。其中M層處理數據,業務邏輯等;V層處理界面的顯示結果;C層起到橋樑的作用,來控制V層和M層通信以此來達到分離視圖顯示和業務邏輯層。

簡單來講就是:

  • 視圖(View):用戶界面

  • 控制器(Controller):業務邏輯

  • 模型(Model):數據保存

MVC它的數據流轉:

這裏寫圖片描述
(盜用了一下網上的圖…)

  • 用戶操作界面,View接受指令,View 傳送指令到 Controller,也就是從View層到Control層的箭頭所示

  • Controller 完成業務邏輯後,要求 Model 改變狀態,也就是從Control層到Model層的箭頭所示

  • Model 將新的數據發送到 View,用戶得到反饋,也就是從Model層到View層的箭頭所示

Android中MVC模式的體現:

其實Android開發的主要流程都是MVC模式的,比如我們常見的Activity+Layout+Model展示業務邏輯的模式,其中:

Activity - 對應着Controller層,主要是控制層,用於實現業務邏輯

Layout - 對應着View層,主要用於展示頁面

Model - 對應着Model層,主要是保存數據

MVC模式的優勢:

  • 使用MVC模式降低了程序中的耦合度,使應用程序視圖層與Model層分離,減少了代碼之間的相互影響;

  • 由於使用MVC模式降低代碼耦合度,因此可以很方便的擴展現有程序;

  • 不同代碼模塊職責劃分明確,有利於代碼的維護與升級;

MVP開發模式:

MVP開發模式是MVC模式一種進階,MVP和MVC模型的主要區別是model層與View層不再發生關係而是通過Presenter層作爲中間的樞紐。並且各個部分之間都是雙向關聯的;

簡單來講就是:

  • 視圖(View):用戶界面

  • 控制層(Presenter):業務邏輯(負責與View層和Model層雙向交互)

  • 模型(Model):數據保存

MVP它的具體數據流轉是這樣的:

這裏寫圖片描述
(盜用了一下網上的圖…)

  • 用戶操作界面,View接收指令,View傳送指令到Presenter層,也就是從View層到Presenter層的箭頭所示

  • Presenter完成業務邏輯後,要求Model改變狀態,也就是從Presenter層到Model層的箭頭所示

  • Model狀態改變之後將結果返回給Presenter層,然後Presenter層在將結果反饋到View層,也就是從Model層到Presenter層,從Presenter層到View層的箭頭所示

在MVP裏,Presenter完全把Model和View進行了分離,主要的程序邏輯在Presenter裏實現。而且,Presenter與具體的View是沒有直接關聯的,而是通過定義好的接口進行交互,從而使得在變更View時候可以保持Presenter的不變。

MVP模式的優勢:

  • MPV開發模式與MVC開發模式有的優勢相似,都是降低了代碼的耦合度

  • 使用MVP模式View層與Model層不在相互關聯,可以更高效地使用模型,因爲所有的交互都發生在一個地方——Presenter內部

MVVM它的具體數據流轉是這樣的:

MVVM與MVP是相類似的,唯一的區別是,它採用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。

簡單來講就是:

  • 視圖(View):用戶界面

  • 控制層(VM):業務邏輯(負責與View層和Model層雙向交互)

  • 模型(Model):數據保存

這裏寫圖片描述
(盜用了一下網上的圖…)

  • 用戶操作界面,View接收指令,View傳送指令到Presenter層

  • ViewModel完成業務,改變Model層數據

  • Model狀態改變之後將結果返回該ViewModel層,然後ViewModel層自動更新View層顯示

注:google提供的官方data binding框架採用的就是MVVM模型,關於databinding框架的相關知識可參考:完全掌握Android Data Binding

參考文章:
MVVM大話開篇
MVC,MVP 和 MVVM 的圖示


另外對產品研發技術,技巧,實踐方面感興趣的同學可以參考我的:
Android產品研發(十五)–>內存對象序列化
Android產品研發(十六)–>開發者選項
Android產品研發(十七)–>Hybrid開發
Android產品研發(十八)–>webview問題集錦
Android產品研發(十九)–>Android studio中的單元測試
Android產品研發(二十)–>代碼Review
Android產品研發(二十一)–>Android中的UI優化
Android產品研發(二十二)–>Android實用調試技巧
Android產品研發(二十三)–>Android中保存靜態祕鑰實踐
Android產品研發(二十四)–>內存泄露場景與檢測


本文以同步至github中:https://github.com/yipianfengye/AndroidProject,歡迎star和follow


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