组件化开发框架的优雅实现

组件化开发框架的优雅实现

如果你还没对项目进行组件化开发的话,那么我强烈建议你浏览这篇博客!
如果你已经是老鸟,那大哥你就看着点怼吧,写篇博客也不容易!
先来看看我组件化以后的项目结构:
这里写图片描述


appmodel是整个项目的入口,homemodel,contactmodel,customermodel和minemodel是我划分的四个模块,根据公司的实际项目,分别各自对应为首页,触达,客户和我的模块.以上五个模块都依赖于专门负责通信的routermodel,也即路由模块,而路由模块又依赖于basemodel这个模块,从命名也可以看出basemodel主要负责一些公共的base类,诸如BaseActivity,BaseFragment,BasePresenter以及网络框架的封装还有各种图片资源等等,librarymodel是我预留的专门用于后续开发中对第三方可能出现的依赖!
在这里,我先提一下是否组件化的开关:

isModuleRun这个标志位用于控制组件是否能独立运行成一个apk!
通常,任何一个app中可以有对个module,但是一般只会有一个module是设置为application的,其他均设置为library,组件化开发就是可以根据配置条件,将你指定的module能在application和library中自如切换,而在正式发布时再进行合并.这里提到的开关,就是 isModuleRun !以homemodel为例,在开发过程中,我们可以让其单独运行成一个apk,最后上线时,又让其作为一个library,代码实现如图所示:
这里写图片描述
但是此时,还不能将原来是library的模块作为一个独立的apk单独运行.因此配置到这里,这些原本的library缺少属于自己的清单文件.所以,我在这些模块的main目录下,新建了一个debug包,并在这个debug包中新建属于他自己的AndroidManifest.xml.但是这个清单文件在项目运行成一个完整的apk时,怎么避免呢?毕竟,一个apk里面不能同时引用多个AndroidManifest.xml啊!为了解决这个问题,我在library的build.gradle中配置了一个if-else语句,如下图:
这里写图片描述
没错,就是根据之前的isModuleRun的值,引用不同的清单文件!
将项目组件化以后,我们无法避免还是要面对模块间的交互问题.我先举一个场景:contactmodel现在想要获取一个message,而这个message偏偏是在customermodel中加工的,而这两个模块现在又是彼此独立.于是,我们就该实现我们的路由组件,routermodel.上述场景的解决,我在工程中是通过反射和接口回调实现.我在routermodel中专门定义各种接口,customermodel中去按需实现接口,然后我在contactmodel中通过反射获取在customermodel中的接口实现类,并由改接口的父类去接收,没错,这就是多态啊!别忘了路由组件是被所有model依赖的!
这里写图片描述
………………………………………..to continue!
github传送门

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值