iOS架构-搭建可用的App框架

前言:
框架是一个APP的骨骼,核心,一个项目的所有功能以及以后的迭代都是在此基础上进行的,它是开展一个项目的至关重要的一步。如果这一步做的不好,会导致结构散乱、阅读性和扩展性差,影响开发效率甚至导致代码重构。

APP主要做哪些事情?

  • 调用网络API
  • 页面展示
  • 数据的本地持久化
  • 动态部署方案
  • 收集用户数据,给产品和运营提供参考
  • 合理地组织各业务方开发的业务模块,以及相关基础模块
  • 每日app的自动打包,提供给QA工程师的测试工具

架构原则:易读性、易维护性、易扩展性。
常见的分层架构:视图层、业务层、网络层、数据层。

所谓好架构:

  • 有严格的代码规范,结构目录清晰,功能模块分类明确
  • 注释统一明确,有一致规范
  • 避免复杂的依赖关系,确保代码的高封装性和高复用性,减少冗余代码
  • 没有横向依赖,尽可能少的跨层访问
  • 对业务方该限制的地方有限制,该灵活的地方要给业务方创造灵活实现的条件
  • 易测试,易拓展
  • 接口少,接口参数少
  • 低内存,高性能
  • 提高模块化程度,增加组件粒度

一、项目目录结构

确保目录中每一项都为实体文件夹,而非创建的是Group。

项目目录结构

一般包含这么几项(文件夹):

  1. 应用入口(AppDelegate)
  2. 功能模块(Modules)
  3. 管理模块(Manager)
  4. 工具类(Utils)
  5. 基类(Base)
  6. 分类(Category)
  7. 宏定义、头文件(Define)
  8. 第三方库(ThridParty)
  9. 资源文件(Resource)
  10. 支持文件(Supporting Files)
  11. Pods(管理第三方库):可对第三方库进行二次封装供顶层使用,当第三方库的接口发生改变的时候,我们只需要改我们所封装中的接口就可以了。

1. 应用入口(AppDelegate)

应用入口

AppDelegate是应用的代理,应用级的事件都委托它处理,包含启动退出、推送等事件,以及IM、支付等第三方的回调,这使得AppDelegate内代码庞大,错综复杂,十分不利于阅读和维护,因此可以新增了一个AppDelegate+AppService类别,用来处理生命周期之外的业务,AppDelegate作为事件入口,具体实现直接调用类别里的方法,只为更清晰。

2. 功能模块(Modules)

Modules包含了应用内的功能模块,一般根据底部Tab栏划分并关联实体文件夹(默认是虚拟的要手动建立实体文件夹拖进来),每个模块内使用的是MVC模式,一般包含Model、View、Controller这三个文件夹,根据需求也可以增加Resource和Service文件夹,Service封装数据请求,VC里调用拿数据即可,至于Resource为什么在这,我认为当功能模块层级较多时,每个大功能模块都对应许多资源,对应到模块内用起来方便,当然也可以放到最外层的Resource文件夹里,建立对应的模块名称,在这儿我是选择把公共的放到最外层Resource里,功能相关的放到模块里的Resource文件夹内,只为更清晰。

3. 管理模块(Manager)

管理模块

Manager的定义是全局基础服务,通常使用类方法或者单例来实现,主要包含对应用、用户的管理和服务,例如网络状态监听,广告页应用介绍页等;用户快速登录退出操作以及登录状态的获取等。

4. 工具类(Utils)

工具类

Utils文件夹内主要包含全局通用工具,来源于对三方框架的二次封装,或是自己写的工具类。在这个项目里,我封装了带AES加密网络请求工具,全局Toast提示,广告页等。

5. 基类(Base)

基类

Base文件夹用来存放项目的基类,基类作用包含一些定制化的内容,例如页面样式,空数据页面等,使用基类来实现,可以统一控制,利于维护,减少冗余

6. 分类(Category)

分类

对系统类、自定义类增加的类别都放在这里。

7. 宏定义、头文件(Define)

宏定义、头文件

全局宏顾名思义是定义了一些全局通用宏、枚举。
一般是这几种:工具宏定义(UtilsMacros):比如获取屏幕宽高,系统版本,颜色赋值,数据类型验证等;
接口宏定义(URLMacros):定义服务器接口地址以及环境开关;
枚举(Enumerate):全局的枚举

8. 第三方库(ThridParty)

第三方文件夹放一些第三方的类库和对第三方封装,比如第三方登录、支付、IM等。

9. 资源文件(Resource)

主要是各种文件,json、xml、dat、图片,视频,声音等。

10. 支持文件(Supporting Files)

支持文件

主要放 PCH,Assets.xcassets,LaunchScreen.storyboard,Info.plist,main.m等系统文件

11. CocoaPods(管理第三方库)

CocoaPods是iOS项目的依赖管理工具,开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和第三方开源库的时间。

参考Casa大神:Casa架构设计

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

推荐阅读更多精彩内容

  • 前言: 之前看了Casa大神的架构设计文章,醍醐灌顶,一直想开个系列文章记录一下(这次就做个小小搬运工,别打脸),...
    M_慕宸阅读 5,674评论 1 13
  • 最近在搭建新项目的iOS框架,一直在思考如何才能搭建出高可用App框架,能否避免后期因为代码质量问题的重构。以前接...
    yoku酱阅读 599评论 0 5
  • 最近在搭建新项目的iOS框架,一直在思考如何才能搭建出高可用App框架,能否避免后期因为代码质量问题的重构。以前接...
    cosWriter阅读 1,025评论 0 4
  • 1.架构原则: 易读性 易维护性 易扩展性 2.架构图 3.目录结构 3.1 应用入口 AppDelegate是应...
    Iris_Fighting阅读 543评论 0 1
  • 有朋友从网上搜了一篇关于站桩的文章,问我怎么看。 我一打眼,这篇文章我读过,其说理部分还是蛮有说服力的,核心是天人...
    人之生也直阅读 4,760评论 1 16