美文网首页2016技术笔记
2016笔记——组件化学习(综合)

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

作者: 满庭花醉三千客 | 来源:发表于2018-07-27 16:09 被阅读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线程。

    加油~

    相关文章

      网友评论

        本文标题:2016笔记——组件化学习(综合)

        本文链接:https://www.haomeiwen.com/subject/gidgmftx.html