02正式着手项目开发-工程目录的组织

写在前面

  • 工作环境

我加入的是一家创业公司(91分红),我是唯一的iOS。那时我刚刚大学毕业,我所具备的iOS技能可能还不如培训机构出来的多(至少各种第三方库我都不会用),但是公司给了我很大的空间,让我自由成长,这使得我的学习能力得到了充分的发挥。</br>

  • 我是如何学习新知识点的

对于一个新的东西,我一般会先google一下,看5-10篇blog,挑一个写得比较好的照着做一遍,这样在两三个小时内,我能有一个感性的认识。接下来我会去扒一下头文件,大致看一下这东西都能怎么用。然后就是上苹果开发者中心下载相关的文档,读读读。这样第一天我能大致把项目中的功能搭起来,第二天做细节填充和优化。接下来如果有时间我还会去简书之类的论坛挖一些优化帖,参照着优化这个部分。</br>

  • 入职时项目开发的进度

入职时项目已经开始开发了,安卓端、后台、前端都已经工作了两周。我大致了解了一下这个创业项目是干什么,然后拿到了之前的iOS搭起来的框架,发现很乱。Boss表示可以重新来,我果断重建了项目。那么问题就来了,怎么组织项目的工程结构(目录结构)呢?(至于需求分析、UE设计,根本都没有时间管,后面的章节会用另一个项目谈一谈这两点)</br>

  • 正式着手开发之前,我的工程目录结构

关于这个问题,可能初学者根本都没有考虑过。当时我自己学习iOS开发的时候,工程目录简直就是一坨翔。

  • 我是如何想到“目录结构”这个问题的

因为第一天拿到手的工程代码有好多文件啊——网络请求、数据库、各种第三方,乱七八糟的,看得我心烦。根据乔帮主的极简主义和我的各种强迫症,我必须让工程目录优雅起来。</br>

如何组织项目的工程目录

这个没有通用的模版,我查阅了其他工程师分享的目录结构,发现与我的并不完全一致,但是有非常多相似的地方,算是一种工程师之间的约定吧。我总结归纳如下:</br>

可以从两个角度来编排目录结构</br>
  • 从功能点的角度</br>
    优点:可以降低工程目录中各模块的耦合程度</br>
    缺点:可能会使工程目录</br>

  • 从APP使用流程的角度(联系人列表 -> 联系人详情 -> 编辑联系人信息)</br>
    优点:可以根据功能点快速定位代码,工程目录有层次感</br>
    缺点:各功能模块可能使用了相同的东西,这可能会增加目录之间的耦合程度(应用多处用到)</br>

目录结构通常会结合“功能点”和“APP使用流程”来编排。

其他人是如何搭建工程目录的

iOS项目的目录结构和开发流程</br>
知乎上有关于项目目录结构的讨论</br>

我是如何搭建工程目录的

-关于共识</br>

  1. 每个项目都会有网络层和数据库层,所以会产生以下目录

    • Tools
      • Network
      • Database
  2. 每个项目都可能用到第三方库(SDWebImage AFNetwrok等),用Cocoapods管理第三方库是最佳选择,可以随时将第三方库更新到最新版本
    小白级的CocoaPods安装使用教程

    • SupportingFiles
      • ThirdPartyFrameWork
        • AFNetwor
        • SDWebImage
  3. 每个项目都可能会使用第三方接口(微信 微博 支付宝等),所以会产生以下目录

    • SupportingFiles
      • ThirdPartInterface
        • wechat
        • weibo
        • alipay
        • gaode
        • ...
  4. 每个项目都可能用到图片、音频、视频资源,所以会产生以下目录

    • Resources
      • Image
      • Video
      • Audio
  5. 每个项目都会用到系统库,所以会产生以下目录

    • SupportingFiles
      • SystemFramework

-个人偏好</br>

  1. 我会把AppDelegate和整个APP的根视图控制器提出来,因为这是整个应用的入口

    • Root
      • AppDelegate.h / .m
      • RootViewController.h / .m
      • (main.m)
  2. 有些工程师喜欢把宏定义文件放在MICRO目录里,我偏好于把全局的宏定义文件放在Root中,其余各部分的宏定义文件放在各个模块对应的目录中,方便管理

    • Root
      • Micro
        • MICRO_MAIN
        • ...

-剩下的具体的实现文件(MVC)

我个人偏好于按照APP使用流程编排目录(细分到每一个功能点),譬如说“微信”这个APP,我可能会产生如下目录</br>

* Chats
    * RecentChatsList
        * Micro
        * Model
        * View
        * Controller
    * ...
    * GroupChat
* Contacts
    * ContactList
    * ...
    * RecommendedFriends
* Discover
    * Moments
    * ...
    * Games
* Me 
    * Profile
    * ...
    * Settings

之前提到了如果按照使用流程编排目录,可能会增加目录的耦合度,所以对于应用多处使用到的功能模块,我会把他们抽出来,放到一个Public目录里,譬如说对于“微信”,项目中我可能会产生以下目录
* PublicModule
    * ScanQRCode
    * AddContacts
    *...

当然,根据项目的具体情况可能还会产生其他一级目录,譬如说比较复杂的应用会使用到相当多的自定义控件</br>
* Custom
    * Extension
    * UIKit
    * ...
总结

“如何组织工程目录”并没有统一的说法,但是会有一些共识。譬如目录名要表明这个目录下的文件的作用(文件名也是一样)、数据库层和网络层要抽出来单独建立一个目录。根据工程师的风格最终会产生不同风格的目录结构,但是我认为编排目录是以管理为目的的吧,所以尽可能写得清楚一点。

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,904评论 25 707
  • 我决定要拥抱美好的生活了! 浑浑噩噩了那么久,终于走出了这一步。 这是我刚刚3分钟前在马桶上思考出来的人生重大决定...
    低骚音阅读 328评论 0 0
  • 您找到了您的幸福吗? 露姬是什么时候开始成为孔岱咖啡馆的常客的?书中没有很清楚地说明,只是通过第一位叙述者——一名...
    书山草阅读 683评论 0 1
  • 想想真可怕,去年的事好像出现在上个世纪,前年更是远古时代,还没发生的事情很快就会成为遥远的记忆,从来不觉得好玩的故...
    氧气是个地铁阅读 3,556评论 1 13
  • 一、慵懒的周六 今天就叙写些闲话吧。 没有五点起床,也没有五点发文,因为我想睡个懒觉,一觉睡到了七点。今天想彻底的...
    一人独占一江水阅读 219评论 1 1