前言
目前来说,MVVM架构在iOS开发中,已经成长为了一套较为完善于成熟的开发体系,相比于苹果默认的MVC架构,MVVM拥有较好的解耦和可测试能力,依托于RactiveCocoa或RxSwift这类的响应式框架,MVVM可以尽可能的减少代码量的增加,而响应式的思路,又能够给我们在处理一些复杂的事情时一个清晰的思路。所以,何乐而不为呢?
从这篇文章开始,我们将从零开始搭建一个基于MVVM框架的工程,希望能够给想使用或者学习MVVM但是又无从下手的朋友一些帮助。
首先是各种各样的选择。
编程语言:Objective-C or Swift
选择OC还是Swift?这也许有点滑稽。有个前提,如果你的工程是需要支持到iOS7更早系统的话,那么你只能选择OC。但是这种情况很少,目前app store大部分的应用都是从iOS7或iOS8开始支持。
OC的优点在于稳定。作为一门已经非常成熟的开发语言,OC在稳定与社区支持上来说比Swift好很多。而且苹果对OC并没有完全放弃,为了让OC更好的与Swift协作,给OC又添加了不少新特性...
Swift的优点是高效率。Swift在上手和开发上,比OC要轻便很多,并且更加智能。摒弃了OC的一些古老而传统的语法之后,我们可以更佳便捷的
我的建议是,如果你需要开始一个新的工程,那么请毫不犹豫的采用Swift。Swift相比较于OC,拥有更强的开发效率,安全性(如果按照合理规范编码的话)。而且如果关注Github的话就会发现,现在大部分的主流iOS开发框架,都转向了Swift。 Swift后续的升级,也不太会像之前1到2,2到3那么大改动。我相信大部分iOS都能认同的一点是:Swift将会在将来的某一天全面替代OC。
函数式框架
目前iOS用的函数式框架主要是RactiveCocoa和RxSwift,RAC支持OC和Swift两种语言,而RxSwift显然是支持Swift的。其实两者并没有优劣,他们的很多概念是相通的,重点在于你自己觉得适应哪一种。如果你之前在OC的项目中已经用过了RAC,那么你可以继续在Swift里用RAC开发;如果你之前在JAVA下用过RxJava,那么你可以很轻易的转到RxSwift里。
本工程中,我们选择的是RxSwift。
网络库
现在iOS开发中,OC里用的最多的是大名鼎鼎AFNetworking。AFNetworking在3.0之后全面采用NSURLSession替换之前的NSURLConnection,这样在底层大幅提升了网络性能,并且也使得AFNetworking3.0必须在iOS7以上的环境使用,当然这对当前的开发来说,基本没有影响了。
AFNetworking做了啥?都说AFNetworking是轻量级的封装,那么到底轻量在哪里呢。在使用NSURLSession之后,AF的大部分工作放在了请求的封装和解析中,实际操作发送和接收其实已经交给系统去处理了,而AFN则是帮助我们便捷的打包一个请求,便捷的自定义解析。
不过既然开发语言选择了Swift,那么肯定要试一试AFNetworking的Swift版本:Alamofire。Alamofire本质和AFN一样,对URLSession进行了封装,但是采用了函数式的编程来编写和调用。
数据库
随着云概念的普及,越来越多的app不再采用本地数据库了,而且在iOS开发中,有很多轻量级的本地持久化方法来替代数据库,例如UserDefalut,JSON/Plist文件等。数据库的优势在于检索,在这个云检索十分发达的年代,本地数据检索更多的是作为在无网络的情况下的缓存方案。
在需要使用本地数据库的情况下,Sqlite与CoreData是大家常用的两种,事实上也就是这两种种。sqlite是偏向底层的api,在阉割了部分大型数据库的功能后,他提供了一个性能与轻量化兼备的移动应用数据库解决方案。而CoreData是苹果提供的对于Sqlite封装后的框架,他提供了对于数据实体直接操作的功能,从而省去了我们与底层的接触。
我推荐Sqlite而不是Core Data。不仅仅是性能上的问题,sqlite3所支持的sql语句操作,能让我们在很多时候更佳方便的处理数据库事务,而通过封装,我们也能提供和CoreData一样的操作实体的便捷。
其他
我们需要一些其他的工具来给开发提供便捷,这些会在工程后续里用到,最终,我的想法是把这个工程做成一个框架(当然他是需要依赖于很多现有的框架),可以给我们在搭建MVVM工程的过程中提供有效的帮助
Github地址:https://github.com/J219/EndlessWork
如果文章有错误或者不合适的地方,欢迎指正。