iOS文件目录总结

最近重新整理了一个项目的文件结构,做个总结。

总体上文件目录如下

Root
Marco
Module
Utils
Feature
NetworkService
Vender
Resource

我接手这个项目的时候,文件目录都是MyProject、MyMethod这样的,非常不利于理解。就想改一下,我认为文件目录应该是利于新人快速了解项目以及自己方便的管理项目的,尽量做到一目了然和方便。

Root

一般存放AppDelegate.h/m 和RootViewController.h/m(如果有这个类的话),便于一下就能找到项目的入口,开始熟悉项目。

Marco

存放一些宏定义

Marco
    |- AppMarco.h    
    |- VenderMarco.h
    |- UtilMarco.h
    ...

AppMarco.h

存放一些app通用的配置信息,如这样的

#define Color_BarBg       0x76767d//深灰色
#define Color_backGround  0xe7e7e7//灰色
#define Color_Line        0xcccccc//分割线颜色
#define Color_separateBg  0xeeeeee//间隔空格
#define Color_whiteColor  0xffffff//白色

VenderMarco.h

存放第三方框架相关的一些配置,如各种appkey

//  友盟AppKey
#define UmengAppkey @"blabla"
//  微信应用Id
#define UmengSocialWeChatAppId @"blabla"
//  微信应用secret
#define UmengSocialWeChatAppSecret @"blabla"
//  QQ互联应用Id
#define UmengSocialQQAppId @"blabla"

UtilMarco.h

存放常用的工具宏,如

#define IOS7 ([[UIDevice currentDevice].systemVersion floatValue] < 8)
#define IOS8 ([[UIDevice currentDevice].systemVersion floatValue] >= 8)
#define IOS9 ([[UIDevice currentDevice].systemVersion floatValue] >= 9)
#define IS_IOS7_AND_LATER ([[UIDevice currentDevice].systemVersion floatValue] >= 7)
#define boundswidth  [UIScreen mainScreen ].bounds.size.width
#define boundsheight  [UIScreen mainScreen ].bounds.size.height

Module

存放公用一些公用的,但是和项目又有一定耦合度,不适合放在Util中的东西

Module
    |- Login            //登录模块 
    |- Register         //注册模块
    |- Share            //分享模块
    ...

Utils

存放一些自定义的工具类

Utils
    |- Category                 //UIColor、UIImage等扩展
    |- WXCommonMethods          //我自己的工具类
    ...

Feature

功能模块,对于这个的分类我看网上是有各种争议的,主要是两类,先模式(MVVC、MVVM等)后功能(Home,Discocer等)和先功能后模式。一般来将先模式的比较适合大的项目,可以统一管理,先功能的使用于功能不太复杂的项目,能很快的找到对应的代码,不用在一堆VC里找到自己的。也因为我目前接触过的几个项目都是小项目,对于前者不太好评价,我个人一直都是先功能后模式的方式的。

Feature
    |- Home
        |- Model
        |- View
        |- Controller
        |- Other        //有时有些功能需要单独的几张图之类的东西,我会选择放在这里
    |- Discover
        |- Model
        |- View
        |- Controller
        |- Other
    //我们项目的现状,但我是不满意(至少命名不该这样)的,可以放APIRequest之类

NetService

存放网络请求相关的,其实这个目录不好弄,我目前是不满意的,只是目前项目里前人写的是MyRequest这样的公共类,有待进一步修改

NetService
    |- APIMarco.h        //存放各种API名,API前缀等
    |- MyRequest         //我们项目的现状,但我是不满意(至少命名不该这样)的,可以放APIRequest之类

Vender

不能用CocoaPods管理的第三方框架,以及自己有修改源码的第三方框架

Resource

资源目录

Resource
    |- image
    |- sound

另外的一些第三方框架就用CocoaPods管理了,那个大家基本都一样,就没什么好总结的了。
也许以后项目大了之后还会再改变吧,等到以后尝试了ReactNative、MMVM之类的之后再总结。