App的模块化
一点浅薄的经验
分出章回、批阅十载
作者:@nixzhu
相对于桌面应用,虽然App运行于小小的手机上,但其开发同样也是一项完整的软件工程。相较于一些日常测试的小Demo,一个成熟的App的代码行数可能会以数十万计。我常常想,要是我能在一开始就“看”到此时这款App的代码结构,定会少走许多弯路。
随着开发的进展,代码逐渐增多,某些代码会显著被其它代码依赖,最后我们甚至可以给它们起个名字,比如叫做某某模块。既然这样叫,那为什么不真的独立出来?
开个分支,增加一个Target,将一些文件放到其中,修复编译错误(加一些public等),再修改此Target暴露给外部的API,让它更好使用。
我的建议是每两周都这么想一想、做一做,目前的代码里有没有可以独立出来的模块?然后花一点时间去把它从源项目中剥离出来。
可能很不幸,你看到这篇文章的时候,你的项目已经很大了,虽然从某些文件的名字看起来它确实应该独立为一个模块了,但并没有人来做这件事,甚至其实其代码对其他部分的依赖还很严重,短时间来看并不容易分离。
那么我们可以换一个思路,这个App的核心是什么?
就我来看,可能有网路层、模型、持久化等。也就是说,有了这些,你可以用它写一个命令行版的App出来。
既然如此,先将这个“核心”剥离出来,它的特征是缺少了它App就不可能工作,且不依赖任何UI的部分。
再之后,分析自己的App,或者有意识地持续分离不应该互相依赖的部分,最后渐渐独立出各种模块来,把它们变成Framework。
以上总结起来却很简短:编写代码时有意识地注意“复用”和“重构”。每次你要从其他文件里拷贝代码的时候都应该思考一下,这段代码适合变成一个函数吗?应该放在Extension里还是写一个类封装一下?每次修改一个函数的时候,就观察它是否太长?是否不易读懂?是否参数过多?甚至是否命名不合适?
就如初生的婴儿,你愿意它健康合理地成长还是变成一团谁也解不开地乱麻?
有错误自然要修复,有警告也要积极处理。