iOS项目工程及目录结构
做过一些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项目工程及目录结构的更多相关文章
- Eclipse中一个Maven工程的目录结构
在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织的这种问题,跟不要说自己 ...
- Eclipse中一个Maven工程的目录结构 (MacOS)
1. 为什么写这篇文章 在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织 ...
- YII框架开发一个项目的通用目录结构
YII框架开发一个项目的通用目录结构: 3 testdrive/ 4 index.php Web 应用入口脚本文件 5 assets/ 包含公开的资源文件 6 css/ 包含 CSS 文件 7 ima ...
- maven项目的标准目录结构
maven项目的标准目录结构如下:
- maven 创建web项目的标准目录结构
maven 创建web项目的标准目录结构 CreateTime--2018年4月18日21:05:37 Author:Marydon 1.标准目录介绍(开发目录) 2.在eclipse下,目录展示 ...
- 第一个Maven工程的目录结构和文件内容及联网问题
[第一个Maven工程] ①目录结构 Hello |---src |---|---main |---|---|---java |---|---|---resources |---|---test |- ...
- Android工程的目录结构
1.最大限度的将不需要出现在Java代码中的文件和代码本身分离开来 2.使用XML标记语言定义UI和数据结构 3.对于工程中的文件存储在工程目录中的那个位置有着严格的规定,在编译过程中Android会 ...
- Android项目实现Module目录结构分组
一.背景 项目需求的频繁迭代,新的产品功能在不断添加和延伸,随之带来的是,项目技术复杂度的提升. 近几年来,Android模块化.组件化相关技术得到极速发展,将项目整体进行分层,不同的层次之间依据实际 ...
- eclipse下maven项目保持原有目录结构配置resin运行环境
maven项目用起来很方便,但是它的目录结构和eclipse的目录结构是有区别的,故而在eclipse下的maven项目,直接运行调试是有一些问题的. 为了方便maven项目的运行调试,因而也就有了像 ...
随机推荐
- gitlab之source tree使用方法
一.简介 1.source tree 是什么 可视化项目版本控制软件,使用git项目管理,支持windows/mac 客户端使用source tree开发源码,图形化提交到gitlab 二.使用sou ...
- day8文件操作作业详解
1.day8题目 1,有如下文件,a1.txt,里面的内容为: 老男孩是最好的培训机构, 全心全意为学生服务, 只为学生未来,不为牟利. 我说的都是真的.哈哈 分别完成以下的功能: a,将原文件全部读 ...
- JS 时间格式为/Date(1332919782070)/ 转化为正常的格式
原理是取中间的毫秒数,再转换成js的Date类型 function ChangeDateFormat(val) { if (val != null) { var date = new Date(par ...
- P2184 贪婪大陆 树状数组
树状数组帅炸了....又被一道水题轻虐,又被学长指出了一个错误....我太菜了QAQ 开两个树状数组,一个记录左端点,一个记录右端点: 共有cnt(总数) - (<l的右端点数目) - (> ...
- 洛谷P4719 【模板】动态dp
https://www.luogu.org/problemnew/show/P4719 大概就是一条链一条链的处理(“链”在这里指重链),对于每一条链,对于其上每一个点,先算出它自身和所有轻儿子的贡献 ...
- docker jetty启动时报错 failed setting default capabilities.
docker 容器中jetty启动fail ,查看/var/log/jetty中的日志发现具体错误信息如下: failed setting default capabilities.set_caps( ...
- C# 实现Tree,包含parentId和children
1.先定义一个类型 public class Node { [JsonProperty(PropertyName = "id", NullValueHandling = NullV ...
- 朱晔的互联网架构实践心得S2E7:漫谈平台架构的工作(基础架构、基础服务、基础平台、基础中间件等等)
前言 程序开发毕竟还不是搬砖这种无脑体力劳动,需要事先有标准,有架构,有设计,绝对不是新公司今天创立,明天就可以开始编码的.其实很多公司在起步的时候没有财力和资源建设独立的基础架构或平台架构部门,甚至 ...
- 次小生成树(SST)
次小生成树(SST) 题目背景 Awson是某国际学校信竞组的一只菜鸡.Awson最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当Awson洋洋得意之时,信竞组其他大 ...
- watir 的api在线文档
http://rubydoc.info/gems/watir-webdriver/frames http://rdoc.info/gems/watir-webdriver/frames http:// ...