背景
美团猫眼lib需要移植到团App、点评App
这里希望底层服务使用宿主App的(服务:网络库,缓存库,下拉刷新...)
于是每次调用到这些服务的时候,面向接口
所有的接口实现类,需要写进一个配置类
使用这个lib的时候,只需要传入配置即可
整体实施
原有的耦合
接口隔离
配置传入
整体思路比较简单,就是面向接口,具体实现传入配置,实现配置式编程
但是在实践的时候,确实是比较繁琐的,也做了很多工作
需要把一个页面耦合的Model、utils、基类、资源、引用的View统统抽离
细节工作
1、拆分Model、Utils
2、资源拆分:无需去做,太过繁琐,因为资源最终会Merge,如果外部希望覆盖,复写即可
3、拆分功能,面向接口
4、MVP - LifeCycle,以View作为V,粒度更小
5、使用ServiceLoader,反射创建实现类
6、开发Gradle插件扫描配置文件,校验合法性
7、数据库抽离
8、使用ViewModel共享页面数据
9、广播进行模块、进程通信
10、ContentProvider监听宿主数据
收获
1、这其实就是配置式编程,分析软件开发过程中易变与不变的性质,留口传参,配置注入
就好像Retrofit一样,把converter、adapter开放出来,留一个口传入
这是非常好的思想,值得借鉴
2、个人觉得既然是美团系App,不如和两个App底层库尽可能统一
底层库假如能够统一,就不用做这么多复杂工作了
实际开发中,底层库统一是很正常的,都是用三方库,用哪个不是用,比如难道就必须使用GreenDao吗
统一后反而还能增加人效
这点在美团外卖App平台化文章中就是这样实践的
后记
学习自
https://mp.weixin.qq.com/s/kd3VUJkQLAcyjvkaDGKhng?tdsourcetag=s_pctim_aiomsg
有什么写得错误、让人费解或遗漏的地方,希望可以不吝赐教,我会马上更改