写在前面的话:
很久没有写过东西了,平时有些想法习惯记录在备忘里。从项目开始重构,也有同步把自己遇到的问题梳理一下的想法。接手整个项目也快一年了,中间经过两三次重大版本的更改,目前项目涉及到业务有直播,社交,动态,核心业务暂且归为这三个模块。这次重构也考虑了很久,实在是再也无法忍受当前项目的整体架构,由于项目经手的人员比较多,各种代码风格都有,而且大量使用了Storyboard和Xib,刷新和加载更多就存在三种,数据解析处理更是混乱。核心的直播模块类已经达到将近6000行的代码,网络请求类也4000行左右的代码,代码整体采用了MVC的设计模式,耦合度很高,每次修改一些东西很痛苦。项目中也做了一些马甲包,采用了一个项目多target做法处理马甲包。每次编译工程,总要经过漫长的等待。综上,终于下定决心重构整个项目。
关于重构的几个点:
1. 首先对于整体业务模块,复杂的业务采用VIPER的设计模式进行重写,简单的业务还可以继续采用MVC的模式处理。主要是解决重控制器并尽可能的解耦合,还有在此过程中逐步删除故事板和Xib。
2. 对于网络层,之前的网络层是集约化的调用,随着项目业务的逐渐增加,虽然对网络请求经过了几层封装,但是核心的接口层,还是过于庞大。所以决定采用离散型的方式去重构网络层,对于每个网络请求都是一个独立的API类,这样虽然项目整体文件会增多,但是业务会清晰了不止一个档次。PS:网络层是集成了YTKNetwork,并基于自己的项目的需求做了一些更改。
3. 基础UI组件,Category的整理。这一点整理之前真的很庞大,几乎在这里找到所有人写的小组件,但是也几乎是没有参考也没有看过别人写的东西,很多东西都是重复的。
4. 对于数据的缓存重构,因为项目涉及到IM,还有动态,项目采用了大量的数据缓存处理,包括内存缓存和磁盘缓存。自己也是第一次接触,这么大量的缓存处理。目前项目整体采用了四种存储方式,YYCache,WCDB,NSUserDefault,文件存储。
5. 对于整体项目的UI规范,代码规范,宏定义,枚举等整理。
6. 基于以上五点,处理完成以后,开始对项目划分粒度,并开始对项目进行模块化。初步的模块化方案是采用CocoaPods将各个模块剥离,打包成静态库。主项目只作为壳工程。
End:
以上是对于此次重构的基础方向,后续会逐步更新一些文章,介绍具体的重构进程和上面六点详细处理方案,以及自己对VIPER设计模式的理解,网络层的封装,数据存储的处理,还有对于组件化方案的实践。
网友评论