0

想定:
次のようにセットアップできる Java/Android モジュラー ライブラリがあります。

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();
}


問題:
現在の依存関係図が表示されます: 依存関係はありません。 大丈夫です

このコードを追加すると、以下が表示されます

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

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


マークされた依存関係を防ぎたい: 問題

ノート:

  • ModuleConnectorcom.mycorp.app.sample.integrationパッケージに入っています
  • com.mycorp.app.sample.globalすべてのクライアント側パッケージにすることができます。
  • com.mycorp.app.sample.integrationモジュール api にアクセスするために使用したい
  • 私は多くの API メソッドを持っているので、 コマンド/戦略パターンからは使用しないことを好みます
4

2 に答える 2

0

これはパズルですか?あなたのコードは、依存関係が何であるかを示していません。コンパイル時または実行時の依存関係ですか? どのような分析で図が作成されましたか?

あなたが提供している情報では、依存関係が何であるか、またそれを防ぐ方法を知ることはできません.

于 2012-08-05T20:18:14.800 に答える
0

シナリオはあまり明確ではありません...しかし、私はいくつかのアイデアを提供しようとしています

おそらく、この直接的な依存関係を削除して、lib を別の jar ファイルとして提供できるようにする必要があります...その場合、「統合」モジュールにラッパーを配置できます

アプリ -> 統合/プラグイン モジュール -> ライブラリ モジュール

同様に、ModuleConnector クラスを呼び出すときは、静的メソッドで初期化する必要があるため、開発者は「ModuleConnector を使用する前に、静的メソッドで初期化する必要がある....忘れてはならない」ことを知っておく必要があります。 ...この種の依存関係を削除したい場合は、提供できます

  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() {}
  }
于 2012-08-06T04:57:55.450 に答える