0%

iOS 架构设计指南

iOS 架构设计指南

1. 工程结构架构

如何构建稳定、可扩展、可变换的工程结构?本文将从信息流的角度,自上而下地分析这个问题。主要分为基础层和展现层两大层,每层又可细分为多个子层。核心思想是将基础层的最下层作为零部件,将业务层最下层作为组装大部件,通过流程串联形成完整产品。

基础层结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
基础层
├── 网络
│ ├── 收发数据
│ │ ├── 单例(持续使用数据)
│ │ ├── 本地(缓存和持续化存储数据对业务的封装输出)
│ │ └── 单次使用(API接口Model封装输出和业务逻辑封装的ViewModel)
├── 存储
│ ├── NSUserDefault(轻量存储的业务封装)
│ ├── keychain(安全级别较高的存储封装)
│ ├── 文件存储(短期存储的业务封装)
│ └── 数据库存储(大数据量存储的业务封装)
├── 动画(可复用的动画功能组件)
├── 视图风格
├── 列表控件
│ ├── 上拉加载更多
│ ├── 下拉刷新
│ └── GuideView
├── WebView控件
├── AlertView
├── iOS系统控件封装
│ ├── 拍照控件
│ └── 通讯录
├── 二维码
├── 语音
├── 安全
├── 支付
├── 统计
└── 日志

展现层结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
展现层
├── 首页
│ ├── 订阅
│ ├── 扫描二维码
│ └── 发布视频
├── 列表
│ ├── 时间轴列表
│ │ ├── Listview头部封面
│ │ ├── 外链情况Cell
│ │ ├── 图片Cell
│ │ ├── 广告插入Cell
│ │ ├── 留言评论
│ │ └── 赞区域
│ ├── 我的列表
│ ├── 订阅列表
│ └── 文章列表
├── 详细页
│ ├── 分享
│ ├── 内容区
│ └── 评论
└── 登录
├── 注册
├── 登录
├── 忘记密码
├── 条款
├── 上传头像
└── 个人信息修改

2. 数据流控制模式

MVC/MVCS/MVVM/VIPER 的选择

这些都是对 MVC 的扩展,只是扩展方向不同:

  • VIPER:将视图和数据拆分得最细,模块复用性最好,但增加了复杂度
  • MVCS:最简单的 MVC 优化,仅将数据存储拆分
  • MVVM:介于 VIPER 和 MVCS 之间,通过 ViewModel 处理数据逻辑

架构模式对比:

名称 逻辑和视图 数据
MVC View + ViewController + Model
MVCS View + ViewController + Store + Model
MVVM View + ViewController + ViewModel + Model
VIPER View + ViewController + Wireframe + Presenter + Interactor + Data Manager + Entity(Model)

3. 代码规范

建议遵循苹果官方代码规范:Coding Guidelines

推荐的代码结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 属性声明
@property
...

#pragma mark - Life cycle
// 生命周期相关代码
// 包括 addSubview 和 Notification 的监听和销毁

#pragma mark - Interface
// 接口声明

#pragma mark - Event response
// 事件响应

#pragma mark - Private method
// 私有方法
// 如果是 ViewController,这里是瘦身的关键
// 业务和逻辑功能相关的代码应该放到 ViewModel 中

#pragma mark - Delegate
// 代理方法

#pragma mark - Getters and Setters
// 建议为所有 Property 都设置 getter 和 setter
// 这样修改配置会比较方便,看起来不会很混乱