5

Shared Utilities プロジェクト、2 つの独立した SDK プロジェクト (それぞれが Utilities を参照)、およびいくつかのプラグイン プロジェクトがあり、それぞれがこれらの SDK の 1 つだけを使用しています。Shared Utilities には、前述のプラグインから見えるようにする必要があるすべて静的なクラスがいくつか含まれていますが、残りのクラスはプラグインから隠したいと考えています。

問題を解決するにはどうすればよいですか?ビルド プロセスをできる限りシンプルにし (ビルドには Ant を使用しています)、依存関係を最小限に抑えたいと考えています。

これまでに検討したオプションと、各アプローチを破棄した理由は次のとおりです。

  1. プラグインで利用できるようになる 2 番目の Shared Utilities プロジェクトは、展開を難しくします。
  2. Shared Utils プロジェクトから 2 つの個別の .jar-s をビルドします。1 つは完全に静的なユーティリティのみを含み、もう 1 つは非表示にする必要があるものすべてを含みます。これにより、ビルドがより複雑になります。つまり、プラグインのビルド スクリプトへの依存関係が追加されます。
  3. 各 SDK のすべての静的クラスをプロキシします - メソッド定義が重複していますが、実装は Shared プロジェクトから対応する静的メソッドを呼び出すだけです - 最も簡単なように見えますが、欠点は、Javadoc を手動でコピーする必要があることです。生成時に自動的にこれを行う単純な Javadoc タグはありますか?
  4. すべての静的クラスを「通常」に変換し、各 SDK でサブクラスを作成するだけです。(私の考えでは) 不必要なパフォーマンス オーバーヘッドです。
4

1 に答える 1

0

「プロキシ クラスを介した静的メソッドの公開」 質問全体を読みましたが、正確に何が問題なのかわかりません。プロキシ (インスタンス) を介して静的 (インスタンスに関連しない) メソッドを公開する。

何から何を隠したくないのか。何を正確に何に公開したいのか。

public class A {

private A(){} //prevent instanciation

public static void doSomething(){} //want to expose to some class, hide from other

}

doSomething の公開を制限するには、可視性を設定できます: Controlling Access to members of a Class

静的な性質を削除し、静的ファクトリ パターンを使用して次のようなオブジェクトを返すこともできます。

public class A {

private A(){} 

public void doSomething(){} //want to expose to some class, hide from other

//the new A can also be set in a member variable and 
//return always the same instance, if it is unmuttable it will be thread safe.
public static A getInstance(){ return new A();}

}

これは「同じこと」のように見えますが、getInstance() の可視性のみを制御することで、A のすべてのメソッドの可視性を制御できるようになりました。javadoc は A にとどまり、getInstance へのアクセス方法を正確に制御できるようになりました。 . 私はあなたが何をしたいのかを正確に理解する必要があります.

于 2013-09-04T13:17:22.550 に答える