做过一些iOS的项目,不同项目的沉淀没有积累到一起,目录的管理都在后期随着人员的增加越来越混乱,因此在这里做一些梳理,希望达到两个目的。

  • 一套相对通用的目录结构,作为后续项目的模版。

  • 积累相应的基础库,在后续的项目里不断打磨,最后开源。

几个基本的原则:

  • 一个合理的目录结构应该是清晰的,让人一眼就能了解目录职责,并且是容易扩展的。

  • 不管是第三方库还是自己的库,尽量用CocoPods来管理。

  • 区分不同层次的通用组件。

    • General Level, 最通用的组件,可以在不同项目里复用。

    • Project Level, 可以在该项目里复用。

    • Section Level, 可以在某个功能模块里复用。

  • 对于General Level的组件,以Library的形式分出来,不要放在主工程。

  • 对于基础库,保证质量,通用性,可扩展性,易用性,可以不断迭代

目录结构

下面是我建议的项目目录结构:(公司名为NB, 项目名为KP, General Level 组件都会以NB打头,Project Level组件以KP打头 )

KP_iOS
|
|--KP
| |--Common
| | |-- KPUIKit
| | |-- KPCommon
| | |-- KPUtility
| |
| |--Consts
| |--Models
| |--Sections
| |--Vendors
| |--Resources
|
|--Pods
| |--NBFoundation
| |
| | -- NBUIKit
| | -- NBCommon
| | -- NBUtility
|
| |--ThirdParty1
| |--ThirdParty2

主目录下分为KP 和 Pods两个一级目录。

  • KP是主工程目录

    • UIConsts.h

    • VendorConsts.h

    • KPCommon : Project Level逻辑组件。

    • KPUIKit:Project Level UI组件。

    • KPUtility:Project Level的帮助函数。

    • Common: 主要存放在KP这个项目里可以通用但不对其它项目通用的Project Level的组件。

    • Consts 存放项目范围内公用的常量。 例如:

    • Model:各个功能模块数据逻辑相关的文件。

    • Sections:各个具体的功能模块UI及交互相关文件。 如果某个Section有一些Section Level的通用组件,可以在具体的Section下有一个Common目录。

    • Vendors: 存放没有被CocoaPods管理的第三方组件

    • Resources

  • Pods是CocoaPods的根目录, 所有CocosPods管理的库都在该目录下。

    • NBFoundation: 可以在所有项目里通用的General Level 的组件(跟KP/Common里的内容及结构类似,但更通用)。

        * NBCommon  通用的逻辑组件。
      * NBUIKit 通用的UI组件。
      * NBUtility 帮助函数。

通用组件

  • 设计通用组件跟设计UI一样,要做到优雅而简洁。

    • 直观性 。接口清晰,跟系统API风格一致,用户一看就知道怎么使用。

    • 易用性 。我们的设计需要使最经常被用到的的功能简单易用,不需要过度的配置,在默认配置下API就应该是可用的。

    • 容错性。 考虑到不同的使用场景,对于复杂场景,通过配置或者API接口,用户可以达到目的。

    • 解偶。 设计组件库另外一个要注意的就是解偶, 组件之间尽量做到不要互相依赖,这就需要每一个组件职责清晰。同时也需要组件库的层次是清晰的,基础库,帮助库,UI库 有层次界线,低层的库不要倒置依赖高层的库。

其它

  • 关于预编译 预编译是双刃剑,它可以加快编译速度,但经常被滥用,很多人图方便把很多头文件都加到预编译,容易导致头文件依赖混乱。 我的建议是只把General Level组件的头文件加到预编译。

iOS项目工程及目录结构的更多相关文章

  1. Eclipse中一个Maven工程的目录结构

    在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织的这种问题,跟不要说自己 ...

  2. Eclipse中一个Maven工程的目录结构 (MacOS)

    1. 为什么写这篇文章 在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织 ...

  3. YII框架开发一个项目的通用目录结构

    YII框架开发一个项目的通用目录结构: 3 testdrive/ 4 index.php Web 应用入口脚本文件 5 assets/ 包含公开的资源文件 6 css/ 包含 CSS 文件 7 ima ...

  4. maven项目的标准目录结构

    maven项目的标准目录结构如下:

  5. maven 创建web项目的标准目录结构

      maven 创建web项目的标准目录结构 CreateTime--2018年4月18日21:05:37 Author:Marydon 1.标准目录介绍(开发目录) 2.在eclipse下,目录展示 ...

  6. 第一个Maven工程的目录结构和文件内容及联网问题

    [第一个Maven工程] ①目录结构 Hello |---src |---|---main |---|---|---java |---|---|---resources |---|---test |- ...

  7. Android工程的目录结构

    1.最大限度的将不需要出现在Java代码中的文件和代码本身分离开来 2.使用XML标记语言定义UI和数据结构 3.对于工程中的文件存储在工程目录中的那个位置有着严格的规定,在编译过程中Android会 ...

  8. Android项目实现Module目录结构分组

    一.背景 项目需求的频繁迭代,新的产品功能在不断添加和延伸,随之带来的是,项目技术复杂度的提升. 近几年来,Android模块化.组件化相关技术得到极速发展,将项目整体进行分层,不同的层次之间依据实际 ...

  9. eclipse下maven项目保持原有目录结构配置resin运行环境

    maven项目用起来很方便,但是它的目录结构和eclipse的目录结构是有区别的,故而在eclipse下的maven项目,直接运行调试是有一些问题的. 为了方便maven项目的运行调试,因而也就有了像 ...

随机推荐

  1. [Leetcode] 002. Add Two Numbers

    https://leetcode.com/problems/add-two-numbers/ public class Solution { public ListNode addTwoNumbers ...

  2. 线程池(2)Executors.newFixedThreadPool

    例子: ExecutorService es = Executors.newFixedThreadPool(5); try { for (int i = 0; i < 20; i++) { Ru ...

  3. java join 方法的使用

    在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束.这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据 ...

  4. CallContext的LogicalCallContext在多线程环境下面公用变量

    压根名听说过这个类的看这里:如何实现对上下文(Context)数据的统一管理 原来以为CallContext就可以直接在多线程环境下面共享使用的,今天突然想到:Asp.Net环境下面,设置来设置去的, ...

  5. Spring注入属性、对象

    对Category和Product注入属性,并且对Product对象,注入一个Category对象 一.新建项目 二.导包 三.新建Category类 package com.yyt.pojo; pu ...

  6. 缓存List并写入文件持久化

    LIfe is half spent before we know what is it. 缓存List并写入文件持久化 需要缓存一个List集合,比如缓存一个输入框中用户之前输入过的内容,下次当用户 ...

  7. Myeclipse发布第一个jsp页面及web project部署到tomcat上的几种方法

    菜鸟日记: 1:new web project: 2:fix the visiting  path of the tomcat,打开在安装目录下conf目录中的server.xml,在</Hos ...

  8. elasticsearch查询方式

    1.query string a).GET /index/type/_search ===>>查询所有 b).GET /index/type/_search?q=filed:value&a ...

  9. Azure 镜像市场支持一键部署到云

    本视频教程介绍了Azure 镜像市场和一键部署到云. Azure 镜像市场(AMP)由世纪互联运营,是一个联机应用程序和服务市场,它通过独立软件服务商(ISV)能够成为 Azure 客户(Custom ...

  10. acdream 小晴天老师系列——我有一个数列! (ST算法)

    小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)S ...