iOS工程目录结构的思考

一、前言

@汉斯哈哈哈iOS 项目的目录结构能看出你的开发经验 这篇博客里提到一点:

  • 面试iOS开发,面试官竟然问他『怎么分目录结构』的,而且还具体问到每个子目录的文件名。
  • 清晰的目录结构,可让人一眼知道对应目录的职能,这也能体现开发者的经验和架构能力。

恰巧,有一次我参加面试,也被问到过类似的问题。
  在日常工作中我自己对此也深有感触,《代码大全》里有个观点:

代码首先是给人看的

我觉得,一个项目的目录结构也是如此。以下是我个人的一些看法。

二、不合理的目录结构

我想应该没人觉得一个项目的 「工程目录结构」这个东西不重要。
  没人讨论这个可能是因为项目不同、团队风格不一样、目录结构没有个通用的标准,不太好下个结论。
  而且项目工程目录结构这个东西,除非开始一个新项目,其它时候大多都是沿用旧项目里已有的目录结构。真正从无到有的完整搭一个新项目,除了软件外包公司,我想机会不是很多。

我因为非科班出身,刚入行时不是很懂,为了先找到一份工作,同时想着快速接触更多的项目(靠数量增加经验),所以在软件外包公司待过一段时间,接触了不少新开始的项目,也接手了不少旧项目的版本升级、维护等工作。

这是我接触过的一些项目的结构目录:

为什么不合理:

我觉得普遍存在以下几个问题
1 、目录结构没有层次性:
  有的工程,一级目录展开后就是十几个二级目录的文件夹。


2 、目录结构层次过深:
  文件夹过多、层级过深,会增加点击的成本。
3、单个目录下文件数过多
  某级目录内文件数量过多,展开后超过一屏。出现这种情况,我觉得就是目录结构设置不合理导致的。
4、目录命名不能够「见名知意」:
  大量的 CommonToolHelperOther这样的文件夹名。
5、没有项目目录结构的ReadMe说明;
  这个属于代码文档中不容忽视的一点。
6、目录存在使用中文命名的情况;
7、结虚拟文件夹与实体文件夹没有一一对应:

可能导致的问题:

1、一个糟糕的目录会让人对工程瞬间失去兴趣。
  2、如果打开一个工程,没办法通过阅读目录结构获得对整个项目结构的大致的了解,这样的目录结构就是不够合理的。这样会导致在不熟悉项目的情况下,很难明白各个模块、各个文件夹里的类的作用。
  3、目录结构如果没有统一的规范,类文件的命名也很难有相应的规则来进行约束;
  4、对于新加入项目的人,如果需要新增一些类文件,会不知道究竟该放在哪个目录下合适,只能先"凭感觉"随便找个地方一放。这样的工程维护起来,只会越来越乱。

三、我的个人经验

1、 简叔在 iOS 项目的目录结构能看出你的开发经验 一文下的评论:

看到这条评论不胜赞同。
  我自己就很喜欢整理,不论是电脑上的盘符目录,还是印象笔记下的笔记本目录,我都习惯于编个号、定期整理。


  这样一般我要找一个存在自己电脑上的东西,在找之前,头脑里就已经基本想到它会在那个大目录、哪个子目录下。配合搜索功能,很少会找不到文件。
  同时,存的时候也不会随便找个地方一放,乱七八糟。基本已经形成一套自己熟悉的规则了。

2、 高质量iOS开发系列之(一)-iOS项目工程及目录结构 中提高的几个基本原则:

  • 一个合理的目录结构应该是清晰的,让人一眼就能了解目录职责,并且是容易扩展的。
  • 不管是第三方库还是自己的库,尽量用CocoPods来管理/区分不同层次的通用组件。
- General Level, 最通用的组件,可以在不同项目里复用。
- Project Level, 可以在该项目里复用。
- Section Level, 可以在某个功能模块里复用。
  • 对于General Level的组件,以Library的形式分出来,不要放在主工程。
  • 对于基础库,保证质量,通用性,可扩展性,易用性,可以不断迭代

此外,该文章中讲到的各模块注意事项,非常切合iOS开发的实际。建议阅读原文,我就不在这里搬运了。

3、 @汉斯哈哈哈 提到的两种常用目录结构的分法:

1.主目录按照业务分类,内目录按照模块分类
2.主目录按照模块分类,内目录按照业务分类

我个人偏向于第二种:按照业务模块划分。因为:

1> 第一种如果项目较大,经常会出现找个控制器对应的tableviewcell找半天。如果不是自己写的,更难找。
2> 开发某一具体功能的时候,涉及到的类基本都是该业务模块里面的类,很少会出现跨目录的情况。而第一种情况则需要经常会跨目录。
3> 从文件耦合度来讲,各业务模块里的文件耦合度相对来说比较高。放在一个目录内,也符合软件设计中的高内聚低耦合思想。

4、一个简单的工程结构目录的Demo

  • 一级目录如下:(中文备注是为了便于理解,实际项目中不要加)


  • 二级目录如下:


5、公用的类、模块放在哪里:
  一般的做法是遇到共用模块单独建一个模块叫common,都放到这里。(这样其实也不是很好,Common也是属于定义模糊的命名)
6、多个Target的情况:
  可以单独出一个Project文件夹,按Target名分各个子目录,内放各个Target中独有的文件。
7、图片资源最好都用 Images.xcassets 去管理。
  Images.xcassets 文件里边也按业务模块分子文件夹,这样可以方便的预览图片。

四、Tips

在定位项目中的文件时,善用以下快捷键可以节省大量时间:

1、Xcode左下角的搜索框 (不支持模糊搜索、会展开对应目录)

快捷键: Command + option + j

2、工程全局搜索(支持模糊搜索、不会展开对应目录)

快捷键: Command + shift + O


注:

以上只是我个人的一些经验,总结的不是很完善。同时有很多地方借鉴了以下文章的观点。有什么能改进的地方,欢迎在评论区讨论!

</br>

参考:

高质量iOS开发系列之(一)-iOS项目工程及目录结构
iOS项目的目录结构和开发流程
iOS 项目的目录结构能看出你的开发经验

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容