组件化(一):为什么要组件化

189 阅读3分钟

前言

一直都想写一篇关于组件化的文字,详细的把自己这些年的心得梳理出来。
但组件化的内容较多,没办法一口气就把它描述清楚。
因此,打算将组件化划分为两个阶段来进行讲解:组件化心得、组件化实操。

背景

随着需求的持续增加,项目规模不断扩大,协同合作的问题也暴露的越来越多。

  1. 怎么让多人、多团队并行开发(分工协作是老大难问题)
  2. 新加入项目的同事快速上手(大项目,总不能让新人先通读整个项目源码再开始工作吧)
  3. 快速迭代、快速立项(能不能把已有的能力快速应用到新项目中)
  4. 如何提高打包效率,调试效率
  5. 跨公司合作时,如何保证源码不泄露

以上这些问题,其实都可以通过对项目组件化的方式来解决。

要聊组件化,按照惯例,就需要先聊聊它的前世今生。
回顾这些年的项目经历,项目的结构设计经历了三个阶段的演进:

  1. 单一模块
  2. 模块化
  3. 组件化

接下来就由我对每个阶段做简单讲解

一、 单一模块

从刚入编程行业开始,相信大家多半都是在这一阶段。不管是hello world项目,还是各自的毕业设计,基本上都是如此。

怎么做
根据MVC模式将项目层级,各个代码根据它所在的层级放置到对应的包目录下
例如:view、control、model、util、bean等。

问题
随着功能越来越多,各个包下的类越来越多,项目可读性,维护性都会越来越差了。

为了缓解这类问题,就在各个层级下进一步按功能拆分为具体的功能包
例如:账户相关、社区、资讯、系统设置等。

总结
总的来说,单一模块的优缺点如下:
优点:上手快
缺点:可读性差、程序员之间相互干扰、不利于模块复用

二、模块化阶段

背景
为了解决单一模块带来的问题,也就是满足多团队协同开发,尽可能降低相互间的影响,同时也为了提高代码的复用性以及复用率。

怎么做

  1. 按功能划分模块,例如:账户、社区、资讯、系统设置等
  2. 创建模块的目录结构-module(eclipse叫library)
  3. 各个模块持续按照适合的设计模式分层,例如MVC、MVP、MVVM等
  4. 以源码依赖的方式建立各个之间的关联关系

总结
仅需以上简单的几步,模块化就实现了。
虽然看起来简单,但是它已经极大的解决了单一模块的一些痛点。同时它的也有着自己对应的优缺点。
优点:

  1. 多团队协同开发时,就可以按照模块划分任务,各自负责对应的模块,避免了相互间的干扰
  2. 其他项目想要复用功能模块,直接链接过去即可
  3. 各个模块只需要维护自己的配置、依赖等信息,不再像以前一样,大家都在app目录下的配置文件中进行修改了(经常代码冲突)

缺点:

  1. 模块间强依赖,结构变动可能会影响其他模块
  2. 模块复用能力不够强,需要手动的递归导入模块依赖的模块
  3. 项目越来越大,编译时间越来越长

三、结语

组件化还是蛮复杂的,本篇文章只是一个引子,罗列没有组件化时有哪些痛点,为了解决这些痛点,就该组件化上场了,下一篇文章,就会讲解如何组件化

👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀