组件化概念介绍
概念
将一个单一工程的项目,分解成为各个独立的组件;然后按照某种方式,任意组织成一个拥有完整业务逻辑的工程
产生原因
组件化最终可达到效果
组件化实践考虑的问题
需要把哪些内容划分成为一个组件
- 基础组件
- 基本配置
- 常量
- 宏
- 分类
- 各种系统类的扩展
- 网络
- 对AFN的封装
- 对SDWebImage的封装
- 工具
- 日期时间处理
- 文件处理
- 设备信息
- ……
- 基本配置
- 功能组件
- 控件
- 弹幕
- 轮播器
- 选项菜单
- 图文菜单
- ……
- 功能
- 断点下载
- 音频处理
- ……
- 控件
- 业务组件
- 业务线1
- 子业务线1
- 子业务线2
- ……
- 业务线2
- 子业务线1
- 子业务线2
- ……
- 业务线1
基础组件和功能组件是平级关系,不要产生依赖关系。尤其注意不要让功能组件依赖基础组件。大类内部的各个组件,也不能产生依赖关系
每个组件以一个什么样的形式存在
- 组件内部
- 根据设计模式进行划分文件夹结构
- 常量
- 宏
- 根据设计模式进行划分文件夹结构
- 组件形式
- 每个组件都是以pod库的形式存在。都是一个单独的远程pod私有库
- 常量
- 每个组件都是以pod库的形式存在。都是一个单独的远程pod私有库
- 组件测试
- 单独的测试工程
- 常量
- 单独的测试工程
宿主工程面对的是业务组件
以怎样的形式集成各个组件
- 通过cocoapods形式安装各个组件
组件之间如何通讯
- 披露公开API
- 通过中间件的中转
附加问题
- 如何提高编译速速
- 如何解决重复的流程操作
- 库的升级维护问题
组件化过程中,分离每个组件的难点-解耦
- 如果一个组件里面依赖的其他公共功能,该如何处理
- 直接copy代码,虽然恶心,但是它的好处就是快,无额外依赖,对于一些不重要的工具方法,也可以直接copy到内部来用。
- 把组件依赖的代码先做成一个pod库,然后依赖pod库 - 如果组件内部,需要对接某个服务,该如何处理
- 比如,图文菜单的空间封装
- 内部涉及到加载网络图片
- 使用一个block或delegate(协议)把这部分职责丢出去
12 本地库方案 5:41