设为首页 加入收藏

TOP

Android项目模块化/组件化开发(非原创)(四)
2019-08-24 00:11:08 】 浏览:101
Tags:Android 项目 模块化 组件 开发 原创
后解耦,也是今天的重点,如何优雅移除模块间的耦合。
到目前为止,我们已经能够做到让所有不包含业务状态接口的模块的增删,不需要改动任何一行代码。
具体到一个示例就是这样:

 

或者,也可以是这样:

 

这两个段代码的区别就是一个是手动管理Debug的状态,另一个是交给Gradle的编译任务去控制,原理上是一样的。
而这么做是如何实现的呢,其思路就是:一个模块就是一个功能,你想要让你的 apk 具备这个功能,就添加这个模块一起编译就可以了。这才是我们说的真正的组件化,模块之间零耦合,增减模块零改动。
例如图中:debug这个模块,肯定不会用在正式的生产环境;而相反的tinker这个模块,热补丁肯定也不会用于调试阶段。所以我在开发时就可以不使用这个模块相关的代码。
另外再举个使用的例子:我有一个订单模块,订单模块需要播放铃声,比如大家在饭店经常听到“您有新的饿了么订单,请及时处理”。但我在开发订单模块的时候,如果我已经确定铃声播放是没有问题的,那我可以选择开发阶段不打铃声的包,直到发布到线上了再去加上铃声的包。那我没有添加这个铃声模块的时候,我就默认不具备播放铃声的功能,但完全不影响其他的订单模块的业务功能,而这个铃声模块的增删,是不需要修改任何代码的。
听到这里相信大家都很好奇这是怎么实现的。接下来就跟大家讲讲内部的原理。

铁金库解耦
所有的核心功能都来自我们自己写的一个库:IronBank。取《自冰与火之歌》中的【铁金库】,叫铁金库不容拖欠。
铁金库的内部实现,其实是使用了 APT 注解处理器,去在编译时解析注解生成一个类,让这个类去生成跨模块的对象。铁金库使用了与后端 SOA 设计思路类似的方式:将模块之间的主动依赖倒置,变为功能的提供与使用。

 

例如图上左边有一个对外提供媒体功能的服务提供者,他告知IronBank我提供媒体服务:“嘿,老铁,我这有个媒体服务,你那边有谁要用的时候可以用我的。”
到了另一边,如果此刻有模块说是,我需要媒体服务:“老铁,你那有没有媒体服务,我这边需要播一个铃声啊!”。
“有的,给你。”
IronBank就会将之前服务提供者提供给他的媒体对象交给服务使用者。

五、参考文章

    1. https://blog.csdn.net/liyi1009365545/article/details/84032509
    2. https://blog.csdn.net/liyi1009365545/article/details/84766956
    3. https://blog.csdn.net/liyi1009365545/article/details/85853027
    4. https://tech.meituan.com/2018/03/16/meituan-food-delivery-android-architecture-evolution.html
    5. https://mp.weixin.qq.com/s/6Q818XA5FaHd7jJMFBG60w
    6. https://xiaozhuanlan.com/topic/3629451870
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android 解决打包为apk文件时已设.. 下一篇使用HTTP协议访问网络(Android)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目