组件化的概念
1. 概念
- 将单一工程的项目,分解成多个独立的组件,然后按照某种方式,将这些组件组织成一个拥有完整逻辑的工程。
2. 产生原因
- 如果是单一工程,业务线比较少,人数也比较少,一般的开发模式(
MVC
,单纯ViewModel的MVVM
[1])没有问题。
- 如果是单一工程,业务线比较少,人数也比较少,一般的开发模式(
- 另一方面,项目慢慢发展庞大,业务主线增多,开发人员增多,就会暴露出来一些问题:
耦合严重
编译速度慢(某些大型项目Build时间>30min)
测试不独立(功能依赖关联很强)
无法使用多开发设计模式(例如MVC与MVVM)
。。。等等
[1]:带有响应式函数式编程的MVVM,在调试数据以及多人协作时可能会产生一些问题,比如:难以追踪数据紊乱位置。
3. 组件化达到的效果
- 3.1 优势
- 3.1.1 组件独立
独立编写
独立编译
独立运行
独立测试
-
3.1.2 资源重用
功能代码的重复使用 -
3.1.3 高速迭代
增删某块比较方便
可配合二进制化,最大化的提高项目的编译速度[2]
[2]
:更多组件二进制化实践点击科学浏览加速打开
4. 组件化实践考虑的问题
-
4.1 组件划分内容归类
-
4.1.1 基础组件
-
基本设置:
常量
宏
-
分类category
各种系统类的扩展
-
网络
AFN封装
SDWebImage封装
-
工具
日期处理
文件处理
设备信息
。。。
-
4.1.2 功能组件
-
控件
弹幕
轮播器
选项菜单
图文菜单
特殊按钮
...
-
功能
断点续传
音频处理
...
-
4.1.3 业务组件
可根据业务线划分业务线1 ,业务线2 ,比如"我的",“主页”等等;其中业务线还可以再细划分为“子业务线”。 -
4.2 组件存在的形式
-
组件内部
根据设计模式进行划分文件夹结构 (比如 MVC)
-
组件形式
每个组件都以 pod 库的形式存在
-
软件测试
单独的测试工程 (每个小组件内部都可以建立单独的测试工程进行单独测试)
-
4.3 集成组件的形式
通过 cocoaPods 的形式安装各个组件
-
4.4 组件间通讯
披露公开API
中间件的中转
-
4.5 附加问题
-
如何提高编译速度
-
如何解决重复的流程操作
-
库的升级维护问题
Tips:
1> 业务组件可各依赖基础组件还有功能组件,基础组件与功能组件不可有依赖。
2> 同一层组件之间也不可有依赖(比如:功能组件内,轮播器不可依赖弹幕)。
5. 组件化过程中,分离每个组件的难点-解耦
- 5.1 一个组件里面需要依赖其他公共功能
- 直接copy代码
[3]
- 把依赖组件代码搞成一个
Pod
库,然后依赖 Pod 库
[3]
: 好处是迅速解决问题。在一些不中的工具方法,可以使用copy到内部来使用。
- 5.2 一个组件里面需要对接某个服务
- 5.2.1 例如 图文菜单的控件封装
- 可能要用到网络请求图片。
- 使用一个
block
或者delegate
把这部分职责抛出去。
网友评论