2012-08-04 13 views
0

假设:
我有一个Java/Android的模块化库,可以设置这样的:如何从不同的包中调用api方法而不需要额外的依赖?

package com.mycorp.app.sample.integration; 
public class ModuleConnector { 

    public static final LogcatLogger LOGCAT_LOGGER    
     = new LogcatLoggerImpl.Configurator("TEST") 
       .verbosity(LogcatLoggerImpl.Verbosity.VERBOSE) 
       .replace("ApiDesign", "Design") 
       .replace("Sample", "Sample") 
       .createInstance(); 

    public static final JsonWebservice GET_INFORMATION_WEBSERVICE 
     = new JsonWebserviceImpl.Configurator() 
       .logger(LOGCAT_LOGGER) 
       .enableCaching(true) 
       .endpoint("http://test.com") 
       .createInstance(); 
} 


问题:
电流依存性图显示: has no dependency. it's ok

添加后此代码显示如下

package com.mycorp.app.sample.global; 
public class G extends Application { 

    static { 
     ModuleConnector.GET_INFORMATION_WEBSERVICE.request(null); 
    } 
} 


我想阻止显着相关性: the problem

注:

  • ModuleConnectorcom.mycorp.app.sample.integration
  • com.mycorp.app.sample.global可每客户端软件包。
  • 我想用com.mycorp.app.sample.integration访问模块 的API
  • 我有很多的API方法,所以我宁愿不从 命令/策略使用模式
+0

@corsiKa你知道答案! :) – Behnam 2012-08-04 13:49:42

回答

0

这是一个难题?你的代码不会显示依赖关系是什么。是编译时还是运行时依赖项?什么样的分析产生你的图表?

根据您提供的信息,无法确定依赖项是什么,以及如何防止依赖项。

+0

不!依赖的来源是绝对可见的。当'ModuleConnector.GET_INFORMATION_WEBSERVICE'调用'com.mycorp.lib.invoker.api'中定义的'request'方法时,将创建对此包的依赖。用** STAN4j **生成的图表。 – Behnam 2012-08-05 22:15:01

+0

我的意思是,它不是从你提供的代码中可见的。现在你已经解释了GET_INFORMATION_WEBSERVICE是在com.mycorp.lib.invoker.api中定义的,很明显这是造成依赖关系。 – Tom 2012-08-07 07:14:01

+0

'com.mycorp.app.sample中定义的'GET_INFORMATION_WEBSERVICE'。集成“(见源代码1),但是'com.mycorp.lib.invoker.api'中定义的请求。以及为调用'request'而创建的依赖关系。 – Behnam 2012-08-07 07:27:58

0

的情况不是很清楚......但我想给一些想法

也许你想删除此直接依赖好让你能够提供你的lib作为单独的jar文件......在这种情况下,你可以把一些包装中的“一体化”模块

应用程序 - >集成/插件模块 - >您的库模块

一样,当你叫ModuleConnector类,需要在静态方法来初始化它,所以你的开发者必须知道,“在使用ModuleConnector之前,我必须使用静态方法初始化它...我不能orget“....如果想删除这种依赖关系,那么你可以提供

package com.mycorp.app.sample.integration; 

    Class ApplicationModuleConnector { 
    ModuleConnector connector; 
    static { 
     //do something 
    } 

    //this method will be called by you developer, he need not to bother about init() of ModuleConnector 
    public invokeWebservice() {} 
    } 
+0

感谢您的回答,但正如我所提到的,我有很多api方法和signetures,所以在LibraryMonitor中为每个模块再次定义ApplicationModuleConnector中的api并不是个好主意。 – Behnam 2012-08-06 05:50:46

相关问题