浅谈Android组件化
一个关于组件化的念头
项目经历了岁月的洗礼,经过公司业务上的变化,开发人员的来来往往,代码越来越臃肿和复杂难懂,这时候就必须进行拆分,否则就是一场灾难。就像我们公司的老项目一样,耦合度极高,已经停掉的业务,现在还在项目里面留存着,完全不敢删。新功能上线,因为要回归测试,测试时间有时候比开发时间还长。
组件化这个词,我们应该在各个地方,通过各种渠道,看到过无数次,而且一般会给配上下面这张图,小机器人,绿油油的色彩,非常的鲜艳夺目有调性。
组件化和插件化同属于模块化编程,只是两种不同的展现模式。两者的区别,只有一个:插件化支持动态增加和修改线上的模块,组件化只能对现有模块进行增加和删除。
项目线上功能动态很频繁的电商类APP,适合使用插件化。变动需求不强烈的工具类APP,适合采用组件化。我们公司对灵活性要求不高,因此采用组件化方案。
组件化的几个要点
组件化的要点不算少,下面准备就我认为主要的部分,用提问和解答的方式,梳理大概的思路。
01.如何将一个庞大的工程拆分成有机的整体?
我认为应该分三个部分,主项目,基础公共库和业务组件。先抽出基础公共库,供其他组件调用,剩余部分按照业务逻辑去分组件,利于后期业务的迭代开发,主项目负责装载组件。
02.组件可以单独运行吗?如何做到?
分离开的每个组件,都应支持独立运行,这样我们才能单独在某个模块开发和测试。可以通过 apply plugin: 'com.android.application' 和 apply plugin: 'com.android.library' 去实现两个身份的转换。
这里不要被图给误解到,组件化中的胳膊腿离开了身体,其实还是能独立存活的个体。
03.如何做到组件与组件之间的独立?
组件与组件之间相互独立,才是降低耦合,主要表现在资源隔离和代码隔离。代码隔离可通过gradle3.0 之后 runtimeOnly 依赖语法实现编译期隔离 。资源隔离,目前官方没有现成的隔离方案,暂时可以先使用 resourcePrefix 属性,人为维护。
04.组件之间互相独立,数据如何传递?
考虑路由方案,目前已经有很成熟的路由库 ARouter。
除以上问题,还有组件的集成调试,组件生命周期等问题,我认为前期可以先不考虑,留待后期优化。
组件化前 VS 组件化后
组件化改造的过程是非常痛苦的,但是完成后的开发体验真的超超超超幸福!因为业务模块逻辑分离,代码耦合度降低,所以会带来以下好处:
- 编译时间短
- 开发周期降低
- 减少测试回归
- 快速定位问题
- 业务模块迁移很方便
下面是我司项目组件化过程中的解耦的业务模块:
Android 绿色小机器人坐成两排,十分乖巧可爱。
如何快速开始组件化
第一步,少年,你需要自行去搜索获取关于组件化的知识,在脑海中有它有个清楚的认识。
第二步,针对你的目标项目,梳理整体的业务逻辑和代码架构,做出可行的组件化方案。这一步非常重要,必须提前探好底,让更多的问题暴露在执行前。不然,想象下,你一个模块感觉都要挪过来80%了,发现业务逻辑上分离不开,或者技术上实现有障碍,这就很浪费时间和精力了,还影响心情。
第三步,方案递交给技术 leader ,同意之后,申请排期开发。
第四步,沐浴焚香,拜好代码大神,就开始吧。
友情提示,最好单独拉一个新分支,因为这非常可能持久战,不要因此影响了项目的正常迭代。
我的组建化步骤
-
抽出基础工具类 BaseLib,网络封装库 NetWorkLib。
-
抽出基础资源库 BasicRes,管理公共资源,例如 BaseActivity/BaseApplication 等基类们,对话框,res资源。
-
分离业务逻辑,独立为 Module。
-
选定 Arouter 作为路由方案,连接各组件 Module。
更多Android进阶技术,面试资料系统整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云容器与您相约在KubeCon上海
(一)13日 K8s 动手技术沙龙 Crafting diverse apps, Alibaba Cloud K8S playground《Kubernetes动手实践课堂》日期:11月13日,星期二时间:上午9:00 – 下午15:30地点:会场 302 ACost of event: Free 简介:本沙龙邀请各位参会者动手实践,在聆听容器专家的分享同时,尝试阿里云容器、开源工具。内容涉及多种发布策略,serverless灵活管理,service mesh实践,容器化迁移及深度学习开源工具等等。期望可以给各位一线开发者带来一些帮助。阿里云workshop:《Kubernetes动手实践课堂》 上午主题 – 灵活高效地管理应用09:00 – 09:40 K8s弹性扩缩容实践 – 阿里云技术专家 莫源09:40 – 10:20 K8s的
- 下一篇
冲鸭!强烈推荐 Java 工程师的几本电子书
冲鸭!强烈推荐 Java 工程师的几本电子书 每年双十一都是一个狂欢的日子,想买的东西有太多,那今年的双11,程序员买什么最划算?在我看来双11,买啥都不如买知识,不占空间,还能够让自己变得更好! 为了能更好地帮助各位开发者,一直不断地加快新技术的普及,不断上新质量过硬的小册,让更多开发者可以更快更方便的学习到最新的技术。 一起来看看通过小册可以 GET 到哪些技能吧! ◆ Redis 深度历险:核心原理与应用实践 ◆ 你会学习到: Redis应用 分布式锁、延时队列、位图、HyperLogLog、布隆过滤器、限流、GeoHash、Scan Redis原理 IO现场模型、通信协议、持久化、管道、事务、PubSub、对象压缩、主从同步 Redis集群 Sentinel、Codis、Cluster ◆ Netty 入门与实战:仿写微信 IM 即时通讯系统 ◆ 你会学习到: 服务端如何启动 客户端如何启动 长连自定义协议如何设计 粘包拆包原理与实践 如何实现自定义编解码 pipeline 与 channelHandler 心跳与空闲检测 ◆ 前端性能优化原理与实践 ◆ 你会学习到: 前端性能...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境