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
#pragma mark - Interface
#pragma mark - Event response
#pragma mark - Private method
#pragma mark - Delegate
#pragma mark - Getters and Setters
|