MVVM:將所有的表示邏輯放到ViewModel中,Model 數(shù)據(jù)轉(zhuǎn)換為 View 可以呈現(xiàn)的東西(在開發(fā)中表現(xiàn)在將網(wǎng)絡(luò)請求以及數(shù)據(jù)處理放到VM中,view層中通過懶加載布局,然后重寫set方法直接賦值)
MVVM的出現(xiàn)主要是為了解決在開發(fā)過程中Controller越來越龐大的問題胧砰,變得難以維護(hù)子巾,所以MVVM把數(shù)據(jù)加工的任務(wù)從Controller中解放了出來规惰,使得Controller只需要專注于數(shù)據(jù)調(diào)配的工作,ViewModel則去負(fù)責(zé)數(shù)據(jù)加工并通過通知機制讓View響應(yīng)ViewModel的改變惠呼。
MVVM是基于胖Model的架構(gòu)思路建立的,然后在胖Model中拆出兩部分:Model和ViewModel紧憾。ViewModel本質(zhì)上算是Model層(因為是胖Model里面分出來的一部分)反惕,所以View并不適合直接持有ViewModel,因為ViewModel有可能并不是只服務(wù)于特定的一個View湿镀,使用更加松散的綁定關(guān)系能夠降低ViewModel和View之間的耦合度炕吸。
MVVM模式和MVC模式一樣,主要目的是分離視圖(View)和模型(Model)勉痴,有幾大優(yōu)點
1. 低耦合赫模。視圖(View)可以獨立于Model變化和修改,一個ViewModel可以綁定到不同的"View"上蒸矛,當(dāng)View變化的時候Model可以不變瀑罗,當(dāng)Model變化的時候View也可以不變胸嘴。
2. 可重用性。你可以把一些視圖邏輯放在一個ViewModel里面斩祭,讓很多view重用這段視圖邏輯劣像。
3. 獨立開發(fā)。開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel)停忿,設(shè)計人員可以專注于頁面設(shè)計,使用Expression Blend可以很容易設(shè)計界面并生成xml代碼蚊伞。
4. 可測試席赂。界面素來是比較難于測試的,而現(xiàn)在測試可以針對ViewModel來寫时迫。
參考地址:
https://github.com/shenAlexy/MVVM(demo下載地址)
MVVM百度百科
http://www.objccn.io/issue-13-1/