在搭建一个 App 时,我们一开始通常会对整体 App 进行文件夹划分,换句话说也是架构的搭建组合,通常我们要不按某块划分,要不按 MVC(MVVM)划分,下面对这个来进行个人的理解对比下,当然首先声明,至于用哪一个是得根据项目的大小,项目的具体需求来大致衡量判断。
不过话又说回来,一般划分其实肯定是模块划分和 MVC(MVVM)划分搭配着来的,只是看以哪一个为主罢啦。
-
以 MVC 划分为主
此处是以MVC 为主,模块为父,当然此处类似 HomeViewControllers 文件夹中不止一个类,这个模块类中都可以放在这;另外对于Tools, Additions 的划分,还有诸多,例如可以再添加 Manager, Plugin 管理。如果项目相对比较小,个人认为这个比较适宜。
-
以 模块 划分为主
此处是以模块划分为主,然后再在这某块中进行MVC 划分,这样相对于上一层来说,业务逻辑显得更好处理一些,也方便团队合作一些,每人可以更好的单独负责自己的模块。
恰好,以上两种方式我以前都尝试过,当然现在我们的App 中不是这样的,因为我们用的是我们自己变种的 MVVM ,类似于 第二种模块划分的形式,然而当我们提出组合化的思想后,我自己又想了一下,对我们 App 的文件夹再次进行优化,方便实施,当然后期的 CocoaPods 私有化托管暂且不考虑。
以模块为主,采用MVVM(变种)的方式
- Classes
AppDelegate
Base
-
Common (公共的的)
- Define : 宏、 Const
- Manager: 某些管理类
- Tools : 一些公共的工具
- Category : 系统类的分类
- CustomUI: 一些公共用的,自定义的类
PS: 网络这块归属可自定(Manager、Tool),或者单独列出,而我们App目前是用猿题库那套的,所以直接属于 第三方库的归属去了。
-
Moudle (模块)
- Home
- Category
- Cart
- Video
- Account
- Frameworks 额外添加的库
- Library 第三方库(用CocoaPods 外)
- Resources (info.plist,image)
此处不好划分的是,有公共的类的划分 和 第一级别模块后的再划分。
- Account
- User: 用户信息
- Set: 设置
- Order: 订单
- Point : 积分
- Wallet: 钱包
- ......
此处的划分,个人认为例如 User 之后不需要再细化成文件,关于 用户的信息设置,例如头像,地址,用户名,无需再建立一个文件夹啦。
总的来说,大致的划分是差不多,一些具体的细节需要再后期开发中逐一优化。就像我们目前的 App 中已经有了一千多个文件,在新创建的文件的时候确实会犹豫放在哪一个位置,哪一个文件中,就是因为之前的文件夹划分还有待商榷,另外注意团队小伙伴的意见一致。 目前我们正在优化中,以上全是个人想法,😆。