答案是:爲了減小在每作一個功能的時候所耗費的人力資源。ios
移動開發人員會在如下三個層面上評估一個架構的好壞:架構
職責分配的均衡性 | 易測試性 | 易用性 | |
---|---|---|---|
緊耦合MVC | ❌ | ❌ | ✅ |
Cocoa MVC | ❌ V和C是耦合的 | ❌ | ✅⭐ |
MVP | ✅ 獨立的視圖生命週期 | ✅ | 通常:代碼較多 |
MVVM | ✅ | 通常:視圖(View)存在對UIKit的依賴 | 通常 |
VIPER | ✅⭐️ | ✅⭐️ | ❌ |
舉一個例子,在一個多頁面的網頁Web應用程序中,當你點擊一個連接導航至其餘頁面的時候,該頁面就會被所有從新加載。該架構的問題在於視圖(View)與控制器(Controller)和模型(Model)是緊密耦合的。測試
Cocoa MVC 是蘋果公司建議iOS開發者使用的架構。理論上來講,該架構能夠經過控制器(Controller)將模型(Model)與視圖(View)剝離開。ui
然而,在實際操做過程當中,Cocoa MVC 鼓勵大規模視圖控制器的使用,最終使得視圖控制器完成全部操做。3d
儘管測試這樣的耦合大規模視圖控制器是十分困難的,然而在開發速度方面,Cocoa MVC是現有的這些選擇裏面表現最好的。cdn
在MVP中,Presenter與視圖控制器(view controller)的生命週期沒有任何關係,視圖能夠很輕易地被取代。咱們能夠認爲UIViewController實際上就是視圖(View)。blog
還有另一種類型的MVP:帶有數據綁定的MVP。以下圖所示,視圖(View)與模型(Model)和控制器(Controller)是緊密耦合的。生命週期
MVVM與MVP類似不過MVVM綁定的是視圖(View)與視圖模型(View Model)。資源
不一樣於MV(X)的三層結構,VIPER具備五層結構(VIPER View, Interactor, Presenter, Entity, 和 Routing)。這樣的結構能夠很好地進行職責分配可是其維護性較差。路由
相較於MV(X),VIPER有下列不一樣點:
本文首發於硅谷io