2016技术笔记

2016笔记——组件化学习(综合)

2018-07-27  本文已影响4人  满庭花醉三千客

上面写了8篇组件化的笔记,实际上是4种方案,每种方案是单组件&多组件的记录。

这一篇不拓展,仅仅是整合这4种方案,对比各个方案的利弊。

上文档:

=========================== Protocol方案 ===========================

构成形式:组件管理中心+协议中心

优点:

1 参数类型清晰明了,调用时能知道提供的服务。

2 注册表为字符串,不会造成较大的内存常驻。

3 多个组件时,无需新建文件,在协议中心添加协议即可。

4 如果提供的服务发生改动,只需要修改服务方的操作即可,对调用方影响较小。

5 数据的返回处理较便利。

6 如需添加新服务,只要分别在协议中心和接口VC改动。

7 所有组件功能集中在协议中心里,便于管理。

8 服务方不存在时,便于统一处理。

9 调用时,有代码提示。

缺点:

1 需要在load中进行注册,假设组件中有100个暴露的接口VC,则需要在这100个VC中注册,太多会对Main线程有影响。

2 组件与组件管理中心以及协议中心均存在耦合。

3 协议方法如发生改动(比如修改一个参数类型),则需要在对应的组件中修改,还会影响调用者。

4 协议中心维护成本较高。

5 调用时稍繁琐。

6 理解稍困难。

=========================== Router方案 ===========================

构成形式:路由中心

优点:

1 使用简单,便于理解。

2 组件只与路由中心产生耦合,依赖较少。

3 如果提供的服务发生改动,只需要修改服务方提供的Block即可,对调用方影响较小。

4 多组件时,无需新建文件,仅需添加注册信息。

5 如需添加新服务,只要在接口VC添加Block,并注册即可。

6 Router的维护成本较低。

7 处理无服务时,可统一处理。

缺点:

1 参数不明确

2 需要在load中进行注册,假设组件中有100个暴露的接口VC,则需要在这100个VC中注册,太多会对Main线程有影响。

3 注册时会产生一定的内存常驻,注册的越多,内存常驻越大。

4 使用URL硬编码,不便于维护。

5 数据的返回需要额外构建Block。

6 所有组件的功能都是注册在路由中心,不便于做模块业务区分。

7 调用服务时无相应的代码提示,所有服务均为open。

=========================== LDBus方案 ===========================

构成形式:调解器+协议

优点:

1 新增服务时,只需要在接口VC和协议中做处理。

2 调整服务时,对调用方影响较小,只需要在接口VC中做调整。

3 组件功能集中,一个组件在一个协议中处理,与其它服务无交叉。

4 调用较简单,理解较易。

5 服务管理较简单,单个组件的服务在对应的协议中。

6 便于统一管理无服务的状态。

缺点:

1 协议中的注册列表采取硬编码

2 协议耦合组件,需要暴露组件VC的头文件。

3 多组件时,需要构建新的文件。

4 参数不明确

5 数据的返回需要额外构建Block

6 要在load时注册,假设有100个组件,则需要注册100次,太多会对Main线程有影响。

7 注册时,会持有实例对象,多组件会产生较大的内存常驻。

8 多组件时会有多个协议,协议维护成本相对较高。

9 服务方不存在时,不便于统一处理。

10 调用服务时,无代码提示,均为open...。

11 因多组件多协议,导致维护成本较高。

=========================== CTMediator方案 ===========================

构成形式:调解器+调解器类目+组件业务文件

优点:

1 调解器不需要进行维护。

2 参数清晰明确。

3 无需在load时注册,对Main线程无影响。

4 无需持有对象,不产生内存常驻。

5 使用Runtime,组件与调解器 解耦合。

6 改动服务时,仅需要在组件业务文件中做调整,对其他文件无影响。

7 数据返回较便利。

8 服务调整时,对调用方影响较小。

9 单个组件功能比较集中。

10 服务方不存在时,可以统一处理。

11 调用服务较简单。

缺点:

1 较难理解

2 多组件时,要新建文件,且对文件名和文件中的方法有严格要求。

3 服务与模块相关联,相对较分散。

4 调解器类目在调用组件业务文件时,无代码提示,Runtime。

5 空壳项目整合组件后,他人接手时,比较费时,除非有非常详细的开发文档。

不知道有没有觉得云里雾里的,没有一个整体的宏图?

我就上一个直观的图,费了我好大的劲啊:

屏幕快照 2016-07-05 11.16.59.png

解释一下,这里面所有的✅符号表示该方案在这一个方面是比较好的,❌表示该方案在这一个方面是不太有优势的。

拿维护成本来说,✅表示成本较低,❌表示成本较高。

Main线程,✅表示不影响Main线程,❌表示在load方法中进行注册,多了会影响Main线程。

加油~

上一篇 下一篇

猜你喜欢

热点阅读