移动开发中,随着项目不断的跌代,需求越来越复杂后。项目工程也越来越庞大。那么此时的分模块的开发,则是必然的选择了。在最终的组件化之路上,不妨把单一工程比如石器时代,那么接下来简单的拆分工程分多个模组开来就是铜器时代。
<>强演进
强>
由于从复杂的单工程拆分了多了个模块,达到了代码及资源的初步的隔离,或需求模块的开发人员,开始专注于自己的需求模块模块的开发了。但是随着部分需求有相关性,需要相互调用时。那么问题来了,在AXXX模块中
api项目(“:BXXX”)
而在BXXX模块中
api项目(“:AXXX”)
这时出现了相互依赖,首先编译器会能不过,会出现循环依赖,循环相互依赖的问题,这是绝不允许的。
为了解决上述的问题,将AXXX模块与BXXX模块需要对外提供服务能力支持的,进行封装与抽象。将需要对外暴露接口/协议地方,对其抽象出接口出来。把些这接口独立放在BaseXXXX模块中,这样AXXX模块与BXXX模块,都分别去
api项目(“:BaseXXXX”)
通过BaseXXXX中模块间通信去解决AXXX模块与BXXX模块相互依赖调用通信。
<强>初步的解决方法强>
为了在BaseXXXX模块中,搭建起AXXX模块与BXXX模块相互通信的桥梁,可以在BaseXXXX模块定义一个通信标识接口:
/* * * *跨模块通讯的标识接口接口 */公共接口IModuleApi { } >之前然后主要通过ModuleApiHelper进行通信
公开课ModuleApiHelper { 私有静态Map;,moduleApiMap=new HashMap<的在(); 私有静态Map 延伸,List iModuleApis=moduleApiListMap.get (clazz); iModuleApis.add (iModuleApi); 其他}{ List ,iModuleApis=new ArrayList<的在(); iModuleApis.add (iModuleApi); moduleApiListMap。把(clazz iModuleApis); } } } 公共静态孔隙unregister2List (Class<& # 63;IModuleApi>延伸;clazz) { 如果(moduleApiListMap.containsKey (clazz)) { moduleApiListMap.remove (clazz); } } 公共静态孔隙unregisterAll (Class<& # 63;IModuleApi>延伸;clazz) { 注销(clazz); unregister2List (clazz); } 公共静态& lt; T IModuleApi>延伸;List getModuleListApi (Class clazz) { 如果(零!=clazz) { 如果(moduleApiListMap.containsKey (clazz)) { List iModuleApis=moduleApiListMap.get (clazz); 返回(List * @return */公共静态& lt; T IModuleApi>延伸;T getModuleApi (Class clazz) { 如果(零!=clazz) { 如果(moduleApiMap.containsKey (clazz)) { 返回(T) moduleApiMap.get (clazz); 其他}{ 返回null; } 其他}{ 返回null; } } } >之前 这样比如在AXXX模块中将原有AServiceData类是如下的:
公开课AServiceData { 公共字符串getSomeData () { 返回“这是一些数据”; } 公共空间sayHello () { System.out.println (“hello”); } }android模块解耦组件化总体概述(推荐)