從字面意思來了解,MVVM 即 Modal View ViewModel(模型 視圖 視圖模型)。MVC 是一個用來組織代碼的權威範式,也是建構 iOS App 的标準模式。Apple 甚至是這麼說的。在 MVC 下,所有的對象被歸類為一個 model,一個 view,或一個 controller。Model 持有資料,View 顯示與使用者互動的界面,而 View Controller 調解 Model 和 View 之間的互動。然而,随着子產品的疊代我們越來越發現 MVC 自身存在着很多不足。是以,MVVM 從其他應用而出,在 iOS 中從此我們完全将業務邏輯加以區分并使用這套思想。在 MVVM 中他的設計思路和 MVC 很像。它正式規範了視圖和控制器緊耦合的性質,并引入新的元件 ViewModel。此外,它還有像監管版本的 MVP 那樣的綁定功能,但這個綁定不是在 View 和 Model 之間而是在 View 和 ViewModel 之間。
1)MVVM 模式下的三個特性的分析
任務均攤 -- MVVM 的 View 要比 MVP 中的 View 承擔的責任多。因為前者通過 ViewModel 的設定綁定來更新狀态,而後者隻監聽 Presenter 的事件但并不會對自己有什麼更新。
可測試性 -- ViewModel 不知道關于 View 的任何事情,這允許我們可以輕易的測試 ViewModel。同時 View 也可以被測試,但是由于屬于 UIKit 的範疇,對他們的測試通常會被忽略。
易用性 -- 在實際開發中必須把 View 中的事件指向 Presenter 并且手動的來更新 View,如果使用綁定的話,MVVM 代碼量将會小的多。
2)iOS MVVM 示意圖:

在 MVVM 裡,view 和 view controller 正式聯系在一起,我們把它們視為一個元件。視圖 view 仍然不能直接引用模型 Model,當然 controller 也不能。相反,他們引用視圖模型 View Model。
View Model 是一個放置使用者輸入驗證邏輯,視圖顯示邏輯,發起網絡請求和其他各種各樣的代碼的極好的地方。有一件事情不應歸入 View Model,那就是任何視圖本身的引用。View Model 的概念同時适用于于 iOS 和 OS X(換句話說,不要在 View Model 中使用 #import UIKit.h)。
由于展示邏輯(presentation logic)放在了 View Model 中(比如 Model 的值映射到一個格式化的字元串),視圖控制器本身就會不再臃腫。當然你開始使用 MVVM 的最好方式時可以先将一小部分邏輯放入視圖模型,然後當你逐漸習慣于使用這個範式的時候再遷移更多的邏輯到視圖模型中。
使用 MVVM 會輕微的增加代碼量,但總體上減少了代碼的複雜性。