iOS项目重构笔记 -- 1

进入2018年年尾,iOS开发的环境已经和几年前发生了很大的变化,一方面是iOS系统和Cocoa框架的更新迭代,另一方面是更多优秀的第三方类库的出现,一并提高了iOS项目的开发效率。

开发观念的转变

由于我一直身处小团队,技术能力和项目观念比较滞后,在早年间做过的数个工具类项目的过程中,仅仅按部就班的使用MVC构架,没有着重精力思考构架和测试方面的事情。直到近期修改早起项目遇到困难时,才意识项目构架和自动化测试的重要性。

这两块内容在以前看来,我认为对于小团队或者个人是不需要的,现在我才意识到自己究竟错的有多远。对于小型团队或者个人开发者来说,好的构架意味着更高的代码重用率,大大减少重复劳动。另一方面,第三方类库千千万,对类库进行中间层封装是一件非常有意义的事,好的中间层意味着项目组件的灵活替换,项目迭代地更灵活。

而自动化单元测试则是保证代码质量的最廉价选择,大家都害怕牵一发而动全身,那就在每次改动后,通过自动化单元测试覆盖,来避免一些联动错误,大大减少人力维护的投入。

技术的更迭

优秀的第三方类库给iOS开发效率带来了一些质变的提升,例如MagicalRecordCoreData的封装,MasonryAutolayout的封装,另外要提的Classy,让iOS可以用CSS的思维做UI,MMKV则是微信团队带来的移动版Reids。还有很多我提到的优秀类库,就不一一列出,但要说明的是,有必要的情况下,最好制作类库的中间层接口,这样才能在替换类库时游刃有余,不至于将项目改的面目全非。

项目构架的转变

构架是一个很大的话题,很多人已经讨论了数年。对于开发团队来说,好的构架有助与大家的代码规范统一,协作无缝。对于个人开发者,也有利于项目的迭代更新。所以选择适合项目的构架非常重要,值得在开发前充分做好准备。

除了苹果的MVC模式,目前还存在MVVC、MVP,VIPER等构架模式,不管选择什么模式,或者几种模式的综合,关注点无外乎项目各模块间的解耦合、单元测试和代码分配。说简单一点,好的构架让你知道代码应该放在什么位置。

已我以前不构架的经验看,80%的逻辑代码、UI代码要放在Controller中,这种Controller重用、继承的概率也很小。当我需要测试某部分功能,自动化脚本无从下手,因为逻辑和UI是混杂在一起的,无法单独测试。当我需要更改逻辑、迭代功能时,不知道要怎么下手,一边担心影响现有功能,一边没有规划地添加散布在各处的补丁代码,过几个月以后自己的代码自己都看不太明白了,这都是常有的事。