美文网首页
客户端组件化

客户端组件化

作者: Q14 | 来源:发表于2020-04-09 13:42 被阅读0次

    为什么要组件化模块化

    目前项目中存在的问题

    1. 组件之间依赖很严重 耦合严重 例如GMBase GMPhobos
    2. 编译慢,效率低
    3. 业务开发分工不明确,开发人员要关心非业务的代码
    4. 改代码时,可能会影响其他业务,牵一发动全身
    5. 代码结构不清晰,架构不够稳定,也不便于扩展和组件复用

    优点

    1. 架构更清晰,解耦
      2.加快编译速度
      3.业务分工明确,开发人员仅专注与自己的业务,提高开发效率
      4.组件、业务独立更新版本,可回滚,持续集成
      5.客户端所有页面 支持协议跳转 支持运营 配置跳转到客户端各页面

    组件的定义

    组件是构成业务或者功能模块的基本单位。原则上,组件与组件之间互不依赖。

    模块,module

    例如,我们的社区,是一个业务,可以叫“社区模块”。它可以拆分更小的组件:搜索、签到、评论等
    我们的交易金融,是一个业务,可以叫“社区模块”。它可以拆分更小的组件:搜索、签到、评论等

    两者关系

    从上面的阐述可以得出,一个工程,由多个模块组成,每个模块由多个组件构成。但很多时候,两者界限还是相当模糊。例如“日志组件”称为“日志模块”,也没有违和感。
    组件从业务角度上不能继续拆分,可替换,可复用;
    模块的定义比较笼统,可以是一个Business业务,可以是技术架构中一个业务,也可以是几个组件构成的小功能

    组件化和解耦

    大家不妨先思考两个问题:

    为何要进行组件化开发?

    各个组件之间是否一定需要解耦?

    采用组件化,是为了组件能单独开发,能单独开发App就能快速集成,所以单独开发是结果。要让组件能单独开发,组件必须职责单一,对于代码中已有模块,就需要用到重构和解耦的技术,所以重构和解耦是过程。那解耦是否是必须的过程?不一定。比如UIKit,我们用这个系统组件并没有使用任何解耦手段。问题来了,UIKit苹果可以独立开发,我们使用它为什么没用解耦手段?答案很简单,UIKit没有依赖我们的代码所以不用解耦。

    PS:可以不纠结组件、服务、模块、框架的概念,只关心一件事,这一部分代码能否独立开发,能就叫组件,不能我管你叫什么

    我们之所以要解耦才能独立开发,通常是出现了循环依赖。这时候当然可以无脑的用路由把两个组件的耦合解开,也可以独立开发。然而,这样做只是把强引用改成了弱引用,代码还是烂代码。站在重构的角度来说,A、B组件循环依赖就是设计有问题,要么应该重构A、B让依赖单向;要么应该抽离一个共用组件C,让A、B组件都只依赖于C。
    如果我们每个组件都只是单向依赖其他组件,各个组件之间也就没有必要解耦。再换个角度说,如果一个组件职责不单一,即使跟其他组件解耦了,组件依然不能很好的工作。如何解耦只是重构过程中可选手段,代码设计的原则如依赖倒置、接口隔离、里氏替换,都可以指导我们写出好的组件。
    所以在组件化中重要的是让组件职责单一,职责单一的重要标志之一就是没有组件间的循环依赖

    相关文章

      网友评论

          本文标题:客户端组件化

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