以确定何种设计模式更加适合自己所需要完成的App。
主流的设计模式目前有以下几种(其优劣势仅针对IOS开发):
MVC:
优势:
1.上手简单,使用MVC模式的App 对于数据的处理和界面的处理一般都在viewController中,对于新手来说易于上手。
2.mode和view同时由viewonCtroller做中介来完成各自的工作,直观而且易于错误处理。
3.界面和数据分离,在功能不是很复杂的情况下易于维护和代码编写。
劣势:
1. ViewController会随着功能的复杂而变得臃肿异常,负担过重。代码行数过多在后期维护成本居高不下,查找和修复错误效率较低。
2.MVC模式中对于网络代码处理的尴尬。苹果使用的 MVC 的定义是这么说的:所有的对象都可以被归类为一个 Model,一个 view,或是一个控制器。按照这种说法,网络代码和API通信无处可放。
3.MVC模式测试性较差。这种模式下,开发人员在开发完model层和view层之前,编写单元测试代码难度比较高,也影响效率,最终的结果往往是写完了一看bug还有很多。
MVP:
优势:
1.解除view与model的耦合,使得view或model有更强的复用性。
2.相对于MVC,对于单元测试友好很多。
劣势:
由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。
MVVM:
优势:
由MVC模式演进而来,促进了UI代码与业务逻辑的分离。在一定程度上解决了viewController过于臃肿的问题。
劣势:
1.由于MVC使用数据和界面分离,且数据可能与多个界面耦合,这导致一旦出现bug,调试上会出现较大困难。
2.如果项目过大,会导致绑定数据和转化数据成本更高,不利于维护。
VIPER:
优势:
. 1.全新模式,兼容了MVP和MVVM的优势,更加细分了viewController的功能,弱化了viewController,更加利于单元测试,提高代码质量。
2.数据单向流动,使每一层专注于完成其特定的功能,使类更为强大。
劣势:
1.首当其冲的就是由于其相对较为复杂的分类,意味着新建一个VIPER模式的App需要大量的模板类代码,其困难程度让很多人望而却步。
2.相对于前几个模式,更加细分就意味着上手难度较高,对于没有使用过此模式的开发者来说阅读代码较为困难。
各有千秋,按需取舍。