移动开发架构之MVVM模式
MVVM概念的提出和起源
MVVM是Model-View-ViewModel的簡寫,最早是由微軟公司提出并運用,是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構架構。
MVVM概念解釋和要點
一、基本概念
mvvm1.png
- Model:主要為應用程序提供數據。
- View:還是MVC和MVP中的那個表示層,同時實現UI元素和ViewModel屬性的綁定。
- ViewModel:為View提供數據支持。
以胖瘦的觀點來看,在MVVM中的Model通常是胖Model即有數據屬性的定義也有數據訪問和處理的行為。ViewModel通常是瘦Model只有數據屬性,一般含有少量邏輯。
二、基本要點
Model和ViewModel的功能區別在于,ViewModel是View提供數據支持的,其結構和View保持一致。Model來源于業務處理,保持業務數據的基本關聯和完整性。
三、優點
MVVM模式和MVC模式一樣,主要目的是分離視圖(View)和模型(Model)有幾大優點:
MVVM的經典范例WPF
MVVM并不是一個新的概念,目前由于在移動開發的運用又被大家廣泛討論。要講解MVVM無論是從起源、概念的定義和最佳運用都不可能離開WPF。
MVVM和WPF結合時除了滿足MVVM基本架構模式外,由于在UI編輯時(Xaml)支持多模式的數據和事件綁定完美實現View和ViewModel的對接,同時轉換器和觸發器的運用又保證了其靈活性。所以無論是要深入的了解MVVM還是尋求以MVVM模式構建產品,都建議大家仔細的研讀WPF相關開發知識,是個很好的參照。
MVVM在移動開發中的運用
移動開發中運用MVVM時,view和viewcontroller(安卓:局文件和Activity)正式聯系在一起,我們把它們視為一個組件。視圖view仍然不能直接引用模型model,當然controller也不能。相反,他們引用視圖模型viewmodel。
MVVM.png
用戶輸入驗證邏輯,視圖顯示邏輯處理通常還是要放在ViewController進行,不過對于視圖的控制盡可能通過ViewModel的數據屬性去影響而不是直接操作。發起網絡請求和數據存貯等處理可以放在Model進行但是不可以有任何視圖本身的引用。( model中使用 #import UIKit.h)
展示邏輯(presentation logic)可以放在了view model中(比如model的值映射到一個格式化的字符串),視圖控制器本身就會不再臃腫。使用MVVM的App是高度可測試的;因為view model包含了所有的展示邏輯并且不會引用view,所以它可以通過編程方式充分測試。
在android開發方面目前已有像RoboBinding這樣的架構,可以實現在布局文件中完成與ViewModel的綁定工作。IOS中通常建議MVVM與ReactiveCocoa聯合使用。
Goo框架:IOS的MVVM模式的實現
ReactiveCocoa作為響應式變成概念上確實很火熱也備受推崇。從架構設計思想學習的角度,個人也是很喜歡的。但是主導在產品開發中運用還是不愿意的。俗話說喜歡一件事物原因有很多種,不喜歡的原因只需要一個,Reactive有別于傳統思路和基本IOS開發思維需要一定代價的的學習代價是每個團隊都不愿意接受的。
Goo是什么?
簡單概括一句話:Goo是MVVM模式在IOS開發中的具體實現。使用Goo開發不會改變現有的開發習慣,在一個開發中可以根據具體場景的便利性考慮是否使用Goo,總之Goo具有小巧、靈活和易用等的特點。
舉個栗子
Goo.gif
如圖運行效果,實現通過實現如下幾個小功能來對Goo進行展示。
1:在TextField中輸入數據下面的Label同步顯示
2:單擊左側按鈕改變數據內容,同時影響TextField和Label顯示內容
3:單擊右側按鈕該數據屬性,同時影響TextField和Label的不同屬性。
接下來看使用Goo來實現的具體代碼情況
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_vm = [TrialDataVM using];
_vm.text = @"123";
不用驚訝!代碼就這幾行。
通過bindingWithProperty方法來完成控件和ViewModel的綁定工作,后續只改動ViewModel其自動會影響UI元素的屬性。
Goo是本人依據MVVM模式手開發的IOS下開源框架,后續會專門寫文章來進行對其進行介紹,同時代碼也會在Github共享。希望感興趣的朋友加入將其繼續完善和推廣。
作者:紅胡子剛子
鏈接:https://www.jianshu.com/p/8e452a147d39
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的移动开发架构之MVVM模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 迅雷铺 rmvb 下载(迅雷铺官网)
- 下一篇: 咖啡屋歌曲原唱舞蹈(咖啡屋歌曲原唱)