MVC (Model-View-ViewModel)模型
mvc模型是大家最常用也是最喜歡用的開發模型。
MVVM(Model-View-ViewModel)是另一個架構GUI程序的模型
盡管MVVM和MVC看起來很相似(除了用一個ViewModel替換了Controller),但是他們有一個主要的不同:視圖擁有ViewModel,和控制器不一樣,ViewModel并不知道View的信息。
這點改變提供了很大的好處:
ViewModel可以測試,由于ViewModel不依賴View,所以可以不通過任何UI來測試ViewModel。
ViewModel可以像Model一樣使用,如果需要,ViewModel可以復制或者序列化,就行主Model一樣。這樣可以快速的實現UI的重建和類似的行為。
ViewModel(大部分)是平臺無關的,由于實際的UI代碼在View上面,因此我們只需要很小的調整就可以讓我們設計的ViewModel在Iphone、iPad和Mac上使用。
View和ViewController變的更簡單,由于重要的邏輯被移到了其他地方(ViewModel),因此View和ViewController變成了簡單的UI對象,這使得我們更容易理解和重新設計。
簡而言之,用MVVM替換MVC能夠使UI代碼更加清晰和嚴格。
ViewModel應該包含的內容
ViewModel就像一個模型的適配器,他能夠更好的展示數據。并且他也能夠展示行為的變化。例如,一個ViewModel可能處理:
發起網絡或數據庫請求
確定何時應該隱藏或顯示信息
日期和數字的格式化
本地化處理
然而,ViewModel并不負責實際信息的呈現或者輸入處理,這些是View唯一需要做的領域。當ViewModel需要和View進行通信時,主要通過系統提供的數據綁定來實現的。
ViewController應該包含的內容
OS X和iOS都包含了View(或Windows)Controller,然而在MVVM中并沒看到ViewController,乍一看這可能比較困惑,因為MVVM僅僅是關于View的。但細看我們會發現ViewController實際上是View層的一部分,因為他們處理的事情如下:
布局
動畫
設備方向旋轉
View和Window的轉換,View的切換
提供頁面UI的加載
因此,View實際上的意思是視圖層,他包括ViewController。對于同一個屏幕區域,不需要同時擁有View和ViewController,只需要選擇一個使用起來最簡單的就好。無論你選擇一個View或ViewController,你將仍然擁有一個ViewModel。