Skip to main content

工程目录

合理的目录结构首先应该是清晰的,让开发人员一眼看上去就能大概了解各个目录的内容,这样也容易应对新的变化。尤其是随着代码量的上升,整体目录结构的划分就越发重要,做到以下两点即可:

  • 功能、业务分离。将业务模块与功能模块分离可以减少代码耦合,增强代码复用。
  • 数据逻辑层与视图层分离。数据逻辑与ui分离,同时设定清晰的接口能够提高业务开发与画面开发人员效率,提高测试效率,便于问题排查,同时代码结构清晰。

目录结构#

|-ProjectDemo
|--APPDelegate
AppDelegate.h
AppDelegate+AppService.h
|--Mudule
|---Login
|---FeatureA
|----Model
|----View
|----Controller
|---FeatureB
|----Model
|----View
|----Controller
|--Base
|---TabBarController
|---BaseViewController
|---NavigationController
|---WebViewController
|---BaseCell
|--Category
|--Vendors
|--Manager
|---UserInfoManager
|---IMManager
|---APPManager
|--Tools
|---Network
|---Store
|---Location
|--Macro
FontAndColor.h
Api.h
Keys.h
Util.h
Config.h
|--Images.assets
|--Resources
-Products
-ProjectDemoTests
-ProjectDemoUITests
-Pods

注:目录划分不是绝对的,也没有真正的好坏之分,具体还是按照业务需求、功能需求寻求一种最合适的结构,只要适用于自己的业务,就是好的目录结构。

划分说明#

  • AppDelegate+AppService.h:包含IM、支付等的三方回调,减少appDelegate代码量,处理app生命周期外的业务。随着项目的发展,一些启动事件以及全局功能的初始化会逐渐增多,因此创建一个AppDelegate的分类,将AppDelegate从杂乱臃肿中解放出来。
  • Base:MVC基类、共通控制器。
  • Manager:提供App管理、用户信息管理、通讯管理的助手类,文件名与功能挂钩。
  • Mudule:业务模块(根据底部tab栏划分)内部区分model(可选)、view(可选)、controller避免跨层访问。
  • Base:基类 包含一些定制化内容如无数据页面、错误页面,利于维护,减少冗余。
  • Tools:工具:缓存、定位等的封装以及三方框架的二次封装。
  • Macro:配置:宏定义文件-全局配置参数、工具方法、颜色尺寸等。
  • Resources:资源:plist、音视频、字体、html等并且分类存放。
  • Images.xcassets:Images.xcassets中进行管理,首先根据业务模块分别创建xcassets,再根据页面建立文件夹存放图片。使用assets后,全部的图片不用我们手动再去添加@2x,@3x,只需把图片拖进对应的位置就好了。

文件命名#

图片#

完整的图片命名可以准确表达图片用途,方便开发人员使用,图片名称需要注意以下几点:

  • 通途分类

    说明图片具体用在那一方面,例如:

    • 视图背景 bg_xxx.png,如页面中view的底部图片,navigationBar的底部图片。页面背景图片应扣除状态栏和navigationBar的高度,如果有tab的话也应扣除.

    • 按钮 btn_xxx.png

    • 图示 icon-xxx.png,如返回、添加、删除等功能性图标。

    • 图片 pic-xxx.png

    • tabbarIcon,tab栏图标只需提供未选中及选中状态对应图标即可。

    tab-xxx-n.png // 未选中

    tab-xxx-s.png // 选中

  • 逻辑分类

    从图片的功能用途或具体内容进行描述。

    btn_signup_n.png

  • 状态分类

    比如说按钮的图片根据按钮的显示状态进行分类,一般分为普通状态、点击时高亮、不能点击、选中状态。

    btn-xxx-n.png // 普通

    btn-xxx-h.png // 高亮

    btn-xxx-d.png // 不能点击

    btn-xxx-s.png // 选中

类文件#

类名(以及类别、协议名)应首字母大写,并以驼峰格式分割单词。

例:UserInfoManager

UserInfo:用户信息

Manager:管理者

扩展#

扩展名称清晰表明扩展用途,以类名+扩展(UIImageView +Web)的形式。

例:UIImageView+Web.h

创建一个基于UIImageView 的类别用于网络请求图片。UIImageView为要扩展的类名,Web为扩展的功能。

如何添加文件?#

保持工程文件的物理路径与逻辑路径一致,有利于文件的查找管理。

因此在向工程添加文件时,首先打开项目的文件夹,手动先创建每层的文件夹,再将文件夹add到项目中,这样可以使Xcode中显示的文件夹和Finder显示的保持一致。