答案是:为了减小在每作一个功能的时候所耗费的人力资源。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