程序员Android开发Android技术知识

Android组件化/模块化开发(一)

2018-06-06  本文已影响68人  RunningBun

上一篇文章发布之后又摸了小半年的鱼,前段时间精神状态确实很懒,写的东西都带有记流水账的性质。所以这次决定写点干货。
换了新工作之后,到新公司接手了公司以前的老项目。整个项目都是用coordova、ionic混合开发完成的。啃了两周的项目代码之后,觉得之前留下的摊子确实不好收拾,和产品确认过眼神之后,果断决定重启炉灶。
具体过程就不多啰嗦了,虽然说的是混合开发,不过总体来说仍然是原生为主,部分页面通过webview嵌入H5页面的方式来做展示,并不是网上所谓的一站式混合开发。不过个人认为这种方式才是更符合当前需求的一种方式,至于所谓的ionic之类的,demo很美好,需求很残酷。因为混合开发的缘故,从项目管理的角度和后期的维护性考虑,需要把H5相关的插件代码和原生代码分开,所以这里用到了模块化开发的方式。虽然这个项目目前只有我一个人,不过也正好可以试验一下自己以前想用而被上面无情pass掉的各种新技术。所以这篇文章主要介绍的是自己摸索并结合网上资料总结的一种组件化/模块化开发方式。对于这两种称谓,我个人没有太去纠结区别,所以下文可能会出现混用。本文的目的在于分享一种思路,大家就不要在意这些细节了。

到这里,一个基本的结构就算完成了,但是这个结构仍然不完善。

3.公共层分离
上述的模块如果在使用中,有很大概率会遇到一个问题,部分的实体类、自定义view、布局文件或者资源文件在各个模块都需要用到,但是这些如果放在系统层的moduleBase里面,又会破坏系统层的通用性。所以,我们还需要一个公共层moduleCommon来专门提供上层业务逻辑模块的公共资源。直接上图:
4.细化与扩展

其实在第三步之后整个项目结构已经算是比较完整了,不过随着项目的不断扩大,模块仍然还是需要不断细分。这里说一下整个项目结构的一种规划思路。
在上述的项目结构中,严格来说只有三层:系统层、业务逻辑和app层。
其中app层是相对简单的,只要包含应用启动和初始化的一些额外操作和逻辑。而业务层包含了所有划分出来的子功能模块,为了方便项目结构的显示方便,我们可以把这些模块放在统一的文件夹下

同一层的module可以放在用一个文件夹下 这里需要注意的是放在文件夹下的module在引用时要注意带上相对路径。比如这里的moduleUser在引用时就要从":moduleUser"变成":moduleCore:moduleUser",多级以次类推。
同样,对中间层我们也可以采用类似的方式,因为中间层不仅会包含一些我们自定义的通用实体类等文件,还有可能会有我们常用的二次封装过的三方库和开源库。这些库有些本身就是一个module需要我们引入,有些则是我们经过二次封装的module。这些module同样不适合放在系统层,所以也可以归到公共层里,例如在我的项目里就有支付宝SDK,高德地图等通用moudle 最后在说一下系统层,虽然说这一层叫系统层,但是各个module之间实际上并不一定是平级关系的。比如在我的项目中我引入了greenDAO数据库框架。这个我作为一个单独的数据库模块放在了系统层,但是在层级上是最底层,被moduleBase引用。
最后,附上完整的设计思路和项目结构: 整体结构设计 这里需要说明一下各个模块之间的引用关系。建议各个模块在引用的时候都采用implementation的方式全部引用。例如app模块需要在gradle配置文件中引入所有需要用到的模块,这样可以不用考虑api方式产生的子模块继承引入的问题。例如app模块引入了moduleBill模块,而moduleBill引入了muduleA模块,那么app还需不需要引入这个模块呢?使用implementation的方式虽然繁琐了一点,但是也最大程度的保证了项目结构的清晰。
实际项目结构
到这里,一个基本的组件化项目结构就搭建完成了。这一部分主要是介绍了模块划分的逻辑和依据,偏向思想。实际开发过程中,因为各个module之间的引用关系还有很多的坑,这一部分我会在下一篇文章详细说明。这里就不在赘述。
最后,这种组件化的结构只是自己在实际项目开发中自己结合网上的资料摸索出来的,并不一定是最好的或最合理的,如果各位有更好的方法或思路,欢迎大家留言交流。

Android组件化/模块化开发(二)

上一篇 下一篇

猜你喜欢

热点阅读