android模块解耦组件化总体概述(推荐)

  


  

  

移动开发中,随着项目不断的跌代,需求越来越复杂后。项目工程也越来越庞大。那么此时的分模块的开发,则是必然的选择了。在最终的组件化之路上,不妨把单一工程比如石器时代,那么接下来简单的拆分工程分多个模组开来就是铜器时代。

  


  

  

<>强演进
  

  

由于从复杂的单工程拆分了多了个模块,达到了代码及资源的初步的隔离,或需求模块的开发人员,开始专注于自己的需求模块模块的开发了。但是随着部分需求有相关性,需要相互调用时。那么问题来了,在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延伸,ListiModuleApis=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>延伸;ListgetModuleListApi (Classclazz) {   如果(零!=clazz) {   如果(moduleApiListMap.containsKey (clazz)) {   ListiModuleApis=moduleApiListMap.get (clazz);   返回(List   * @return   */公共静态& lt; T IModuleApi>延伸;T getModuleApi (Classclazz) {   如果(零!=clazz) {   如果(moduleApiMap.containsKey (clazz)) {   返回(T) moduleApiMap.get (clazz);   其他}{   返回null;   }   其他}{   返回null;   }   }   }      之前      

这样比如在AXXX模块中将原有AServiceData类是如下的:

        公开课AServiceData {   公共字符串getSomeData () {   返回“这是一些数据”;   }      公共空间sayHello () {   System.out.println (“hello”);   }   }      

android模块解耦组件化总体概述(推荐)