我们在用Xcode开发小项目时比较少去考虑项目整一个目录结构,但项目达到一定规模以后结构将会影响到开发维护的效率。所以我们最好在项目开始的时候做好充分的设计已达到更好的扩展性。

项目结构的设计

项目目录结构往往要配合项目体系结构设计。比如根据iOS的天然MVC结构我们经常看到类似于:

├─ Models
├─ Views
├─ Controllers (or ViewModels, if your architecture is MVVM)
├─ Stores
├─ Helpers

文件夹的名字表述了存放的内容,需要注意的是Xcode group最好都对应一个实体文件夹,这样逻辑上比较好理解。对于规模较大的项目不推荐使用iOS天然的MVC模式,因为这经常导致ViewController过于庞大难以维护。可以选用比较流行的MVVM,VIPER等模式从项目一开始遵循设计规范进行编码开发。

保持项目文件夹的单纯性

在新建文件的时候,我们有时候很难确定到底应该把文件放到哪个文件夹下面。这很有可能就是因为文件夹分组的意义已经被淡化,也就是文件乱放。这样最终导致整个项目的结构松散令人费解。所以在开发初期应该明确定义各个模块的意义。我拿MVVM模式来说明一下,MVVM里面主要这几个概念:View,ViewModel,Model。那我 们就会有类似这样的结构:

├─ Models

├─ Views

├─ ViewModels

既然我们定义了这种结构,在新建文件的时候就应该把它放入对应的文件夹当中。然后在大分类里面我们可以再根据业务功能模块就行小文件夹的细分。你可能会说三个文件夹哪里够用。确实,我们这里只是指出了最核心的三个模块分组,有需要可以添加多新的文件夹比如这样子:

├─ Models

├─ Views

├─ ViewModels

├─ Stores

├─ Support

├─ Resources

...

你可以添加你想要的分组,但是记住尽量不要随意添加新的文件夹除非真的有需要。

根据体系结构(Architecture)的文件分组

我前面说到的分组思路其实是基于设计模式或者说项目基本的体系结构设计而进行的分组。我们其实可以各种 各样的分组方式,比如说根据业务模块分组,根据页面(ViewControllers)分组等等。我为什么要推荐按照 设计模式体系结构的分组呢?我觉得有以下几点好处: >* 跟系统设计模式和结构相辅相成易于理解。 >* 利于维护项目结构的统一和代码规范的统一。新人一进项目就 能知道需要使用什么模式,按照规范新建文件。 >* 业内相对规范做法,有很多优秀的例子可以学习。 >* 模式是抽象的灵活性较高。

基于模块(module)的文件分组

还有一种比较直接的分组方式是按照功能模块进行分组,这种做法直接了当易于理解。每一个功能模块为一个分组,功能模块里面包含子项目。比如说一个app的目录类似于:

-module1
-module2
-module3

基于MVC每一个module里面都有对应的view,controllers,models。这种分组方式我想在迭代开发需求的时候还是很常见的,不失为一种可行的方案。

总结

无论项目如何组织,项目的整洁和规范是我们每一个用心的工程师追求的完美境界。我们都知道破窗理论,规范制定不复杂,难在大家努力遵循和维护。我相信在项目开始的时候多花一点时间设计基础结构对于项目后期将会有深远的影响。