1.什么是MVC應用框架
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種業務邏輯、資料、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶互動的同時,不需要重新撰寫業務邏輯,
1.1資料關系
(1) View 接受用戶互動請求
(2) View 將請求轉交給Controller
(3) Controller 操作Model進行資料更新
(4) 資料更新之后Model通知View更新資料變化
(5)View 更新變化資料
1.2方式:單向通信

1.3優點
(1) 耦合性降低,MVC本質是分層耦合,減少代碼之間的相互影響,
(2) 可擴展性好,由于耦合性低,在增加需求時,改動小,bug出現的機率小,
(3) 有利于代碼的維護,MVC三層分工明確,模塊職能劃分明確,
1.4缺點
隨著專案的增大,Activity/Fragment的代碼會變得臃腫,
1.5適用場景
適合功能較少,業務邏輯簡單,界面不復雜的小型專案
2.什么是MVP應用框架
MVP的全稱為Model-View-Presenter,分別代表專案中3個不同的模塊
模型(Model):負責處理資料的加載或者存盤,比如從網路或本地資料庫獲取資料等;
視圖(View):負責界面資料的展示,與用戶進行互動;
主持人(Presenter):相當于協調者,是模型與視圖之間的橋梁,將模型與視圖分離開來,
2.1資料關系
(1) View 接收用戶互動請求
(2) View 將請求轉交給 Presenter
(3) Presenter 操作Model進行資料更新
(4) Model 通知Presenter資料發生變化
(5) Presenter 更新View資料
2.2方式:雙向通信

當業務層處理完成后,需要在view層進行回呼,有兩種方法:
第一種:fragment、Activity中new出presenter時,一般通過presenter的構造方法把this傳進去,當業務層處理完成后就能調到Fragement或者Activity中的方法了,
第二種:通過介面回呼的形式實作,fragment或者Activity實作某個View層介面,同樣需要在presenter的構造方法傳入this,在presenter呼叫該介面的方法
2.3優點
(1) Model與View完全分離,修改互不影響
因為所有的邏輯互動都發生在一個地方Presenter內部,減少了Model與View層之間的耦合度,
(2) Model層可以封裝復用,可以極大的減少代碼量,
(3) 一個Preseter可用于多個View,而不需要改變Presenter的邏輯(因為View的變化總是比Model的變化頻繁),
(4) 便于測驗,把邏輯放在Presenter中,就可以脫離用戶介面來測驗邏輯(單元測驗)
2.4缺點
隨著業務邏輯的增加,一個頁面可能會非常復雜,UI 的改變是非常多,造成 View 的介面會很龐大,Presenter層的代碼也會越來越臃腫,
2.5適用場景
對于業務很復雜的大型APP來說,過多的Model ,View, Presenter,就會造成視覺疲勞,不利于維護和管理;對于業務很簡單的小型APP來說,只需要幾個類就可以解決的事情,使用MVP會多出一大堆介面,雖然代碼層次清晰了,但開發成本變高了,所以MVP適合不大也不小的專案,
3.什么是MVVM應用框架
MVVM 是 Model-View-ViewModel 的簡寫,它是 MVP的改進版,解決MVP的不足,MVVM 就是將其中的 View 的狀態和行為抽象化,讓我們將視圖 UI 和業務邏輯分開,
模型層 (Model):負責從各種資料源中獲取資料;
視圖層 (View):在 Android 中對應于 Activity 和 Fragment,用于展示給用戶和處理用戶互動,會驅動 ViewModel 從 Model 中獲取資料;
ViewModel 層:用于將 Model 和 View 進行關聯,我們可以在 View 中通過 ViewModel 從 Model 中獲取資料;當獲取到了資料之后,會通過自動系結,將結果自動重繪到界面上,可以使用官方的架構組件 LiveData、DataBinding 去實作 MVVM架構, 例如DataBindin架構組件會把ViewModel系結到 XML檔案中,保證View中的數值來源都是來自ViewModel,降低布局和邏輯的耦合性,
3.1資料關系
(1) View 接收用戶互動請求
(2) View 將請求轉交給ViewModel
(3) ViewModel 操作Model資料更新
(4) Model 更新完資料,通知ViewModel資料發生變化
(5) ViewModel 更新View資料
3.2方式:雙向系結,View/Model的變動,只要改其中一方,另一方都能夠及時更新到

3.3優點
(1) 低耦合,View可以獨立于Model變化和修改,一個ViewModel可以系結到不同的View上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變,
(2) 可重用性,你可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯,
(3) 獨立開發,開發人員可以專注于業務邏輯和資料的開發(ViewModel),設計人員可以專注于頁面設計,生成xml代碼,
(4) 可測驗,界面向來是比較難測驗的,而現在測驗可以針對ViewModel來寫,
3.4缺點
bug不好找,比如界面例外,有可能是View出錯,也有可能是ViewModel的業務邏輯有問題,也有可能是Model的資料出錯,對于過大的專案,資料系結會導致記憶體開銷大,而對于簡單的專案,使用MVVM有點大材小用,
3.5適用場景
雖然MVVM兼容當下使用的 MVC/MVP 框架,但是不適用于簡單的界面和太過復雜的界面,對于簡單界面而言,MVVM反而使邏輯復雜化了,對于復雜界面而言,相對應的ViewModel的構建和維護成本就會變的很高,
4.ViewModel生命周期

這張ViewModel生命周期圖是谷歌官方提供的,從這上面顯示Activity在橫豎屏旋轉重建時ViewModel也是一直存在記憶體中的,
5.MVC,MVP,MVVM三者演化

6.MVP和MVC的最大區別
在MVP中View并不直接使用Model,它們之間的通信是通過Presenter 來進行的,所有的互動都發生在Presenter內部,而在MVC中View直接從Model中讀取資料而不是通過 Controller,
7.如何選取框架
一句話:沒有最好,結合專案本身哪個合適用哪個!
今天的分享結束了,再見~
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/236062.html
標籤:其他
上一篇:(三)基于Multisim的電臺發射系統:高頻功率放大器的設計
下一篇:Qt 的撤銷回退事件
