最近闲来无事去面试一下iOS开发,让我感到吃惊的,面试官竟然问怎么分目录结构,还具体问每个子目录的文件名。

目录结构确实非常重要,面试官这么问,无疑是想窥探开发经验。清晰的目录结构,可让人一眼明白相应的业务和职能,这也能体现开发者的经验和架构水平。

目前,我接触过的项目中,比较常规的两种结构:
1.主目录按照业务分类,内目录按照模块分类(主目录按照MVC架构分类,内部根据项目模块分类)

优点:相对比较快定位对应的业务。
缺点:模块相关类太过分散,需要来回切换寻找文件,不方便开发。

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

优点:对模块的类集中化,方便管理与开发。
缺点:当几个模块共用一些类时,不太好归类。

假设对简书iOS应用目录分类(非官方):

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

注意: 以上两种分类不是绝对的,具体还得按照业务需求去归类。如果公司多项目的话(指外包公司,哈~),可以尝试按照自己的逻辑去归类,或可以多观察下身边大牛搭建的项目,会吸取到其中的奥秘。代码也一样,多看看大神写的,甚至可以直接模仿大神的代码风格,别人也会把你当做大神!
ps:有评论说,目录备注中文名感觉就lo了。确实开发中,一些非常有经验的程序员,不会这么干,甚至在代码中也很少中文注释。但个人觉得,普通或中高级工程师真滴很有必要多些注释,由于经验少,变量和方法名可能都命名不好,很多用googl翻译直译,甚至自己到审查代码时都不能直译出来。多谢注释好处就是就算你看不懂我写的代码,也一定能让你知道这是干什么滴(万不得己时,哈~),方便自己也方便别人!最后,目录没有真正的好坏之分,只要适用于自己的业务,就是好的目录!

iOS开发——高级篇——iOS 项目的目录结构的更多相关文章

  1. iOS开发——高级篇——iOS开发之网络安全密码学

    一.非对称加密 - RSA : + 公钥加密,私钥解密: + 私钥加密,公钥解密: + 只能通过因式分解来破解 二.对称加密 - DES - 3DES - AES (高级密码标准,美国国家安全局使用, ...

  2. iOS开发——高级篇——iOS中如何选择delegate、通知、KVO(以及三者的区别)

      在开发IOS应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers[B]怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信:1委托delegation2通知 ...

  3. iOS开发——高级篇——iOS 强制退出程序APP代码

    1.先po代码 UIAlertView* alert = [[UIAlertView alloc] initWithTitle:self.exitapplication message:@" ...

  4. iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  5. iOS开发——高级篇——iOS中为什么block用copy属性

    1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC ...

  6. iOS开发——高级篇——iOS键盘的相关设置(UITextfield)

    一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapa ...

  7. iOS开发——高级篇——iOS 中的 NSTimer

    以前的老代码在使用 NSTimer 时出现了内存泄露 NSTimer fire 我们先用 NSTimer 来做个简单的计时器,每隔5秒钟在控制台输出 Fire .比较想当然的做法是这样的: 1 2 3 ...

  8. iOS开发——高级篇——iOS涂鸦画板效果实现

    一个简单的绘图应用,模仿苹果自带软件备忘录里的涂鸦功能 核心代码 #import "DrawView.h" #import "DrawPath.h" @inte ...

  9. iOS开发——高级篇——iOS抽屉效果实现原理

    实现一个简单的抽屉效果: 核心思想:KVO实现监听mainV的frame值的变化 核心代码: #import "ViewController.h" // @"frame& ...

随机推荐

  1. idea拉出Output窗口和还原窗口

    拉出:按住标题可以拖出 效果: 还原:点击restore layout

  2. redis中基本命令

    记录一下redis中的基本命令.redis中有redis-cli工具客户端,使用这个客户端来发送一些命令 一.redis-cli的使用  1.redis-cli使用之发送命令 2.redis-cli使 ...

  3. PyTorch学习笔记——softmax和log_softmax的区别、CrossEntropyLoss() 与 NLLLoss() 的区别、log似然代价函数

    1.softmax 函数 Softmax(x) 也是一个 non-linearity, 但它的特殊之处在于它通常是网络中一次操作. 这是因为它接受了一个实数向量并返回一个概率分布.其定义如下. 定义 ...

  4. vue mixins应用场景

    学习知识得在应用场景中去应用,这样才能真正学到东西,记忆也深刻,以后碰到类似的东西就会了. 1.在assets文件夹下创建一个js文件 // 创建一个需要混入的对象 export const mixi ...

  5. 指针函数(Pointer Function)和函数指针(Pointer to Function或Function Pointer)

    一.指针函数 1.解释:指针函数很好理解:简单来说,就是一个返回指针的函数,本质是一个函数.如: int fun(int x,int y);    //这是一个普通函数的声明,返回值是一个int类型, ...

  6. 合并多个MP4文件

    把多个MP4文件连接起来的方法与音频文件不太一样,比较有效的方法是: $ cat mylist.txt file '/path/to/file1' file '/path/to/file2' file ...

  7. python 连接sqlserver: pymssql

    停了一个月,终于还是把这个做了,工作需要!!!在装pymssql时,一直报错,确定了要先装freetds: 1. 安装freetds时报错,搜索到要先进行如下操作: brew unlink freet ...

  8. MySQL-----改

    改 **修改用户名** rename user 'username'@'IP address' to 'new username'@'IP address'; **修改密码** set passwor ...

  9. 添物不花钱学JavaEE(基础篇)-XML

    XML(Extensible Markup Language) XML在日常工作中经常用到,必须有个了解,不过认识一下即可,不要太浪费时间.实际用到 参考图书 <XML入门经典>大而全,不 ...

  10. SQLAlchemy(2):多表操作 & 连接方式及原生SQL

    一对多:ForeignKey multitb_models.py import datetime from sqlalchemy import create_engine # 引入 创建引擎 from ...