1

ライブラリ/ウィジェットでの遅延バインディングおよび/または依存性注入の概念に少し苦労しています。次の問題に対する最善のアプローチを考え出そうとしています。データを取り込んで表示する視覚化ウィジェット (コンポジット) を実装したいと考えています。

データを取得する方法を実際の視覚化部分から分離したいと考えています。そこで、次のような汎用インターフェイス「DataSource」を追加しました。

public interface DataSource {
    public void fetch(int start, int end, boolean getFeatures, 
                         DataSourceCallback callback);  
}

ウィジェットにセッターを追加します。

public void setDataSource(DataSource source) { this.source = source}

http のようなデータソースをサポートするために、DataSource インターフェイスを実装し、デフォルトのコンストラクターで URL を取る抽象クラスも追加しました。

public abstract class HttpDataSource implements DataSource {
        protected String url;

        public HttpDataSource(String url) {
               this.url = url;
        }
}

私の特定の DataSouce は、この抽象クラスを拡張し、インターフェイスの fetch メソッドを実装します。

public class MyDataSource extends HttpDataSource {

      public MyDataSource(String url) {
             super(url);
      }
}

これはうまくいきます。MyDataSource クラスのインスタンスを作成して、それをウィジェットのセッターに渡すことができます。ここで、ウィジェットをある程度構成可能にしたいと考えています。これは、依存性注入または遅延バインディングのいずれかによって実行できることを知っています。

したがって、1 つのアプローチは、ウィジェットのユーザーがモジュール XML ファイルで DataSource を設定できるようにすることです (gwt-log ライブラリで行われる方法と同様: http://code.google.com/p/gwt- log/source/browse/trunk/Log/src/com/allen_sauer/gwt/log/gwt-log-impl.gwt.xml )

<replace-with class="MyDataSource">
    <when-type-is class="DataSource" />
    <when-property-is name="source" value="MyDataSourceName" />
  </replace-with>

ただし、URL を MyDataSource のコンストラクターに渡すことで状態が得られ、これが遅延バインディングでどのように機能するかがわからないため、それが可能かどうかはわかりません。余談ですが、モジュールの XML ファイルにも URL を設定することは可能でしょうか?

このウィジェット/ライブラリを使用する人が独自の DataSource を実装してウィジェットに渡すことができるかどうかも心配です (遅延バインディングに干渉しませんか?)

別の解決策は、視覚化ウィジェット/ライブラリを使用する親アプリケーションで依存性注入を使用することだと思います (どのように URL を渡すことができますか? おそらく、Factory を注入する必要がありますか?)

これら 2 つの解決策のどちらが優れていますか?一般的に、この問題を解決するために遅延バインディングまたは GIN を使用することは理にかなっていますか?

前もって感謝します

ウエミット

4

1 に答える 1

2

遅延バインディングではなく、GIN を使用する必要があります。据え置きバインディングは、「一連のパラメーターに基づいてクラスの特定の実装を作成および選択するために、GWT コンパイラーによって使用される手法です。本質的に、据え置きバインディングは、Java リフレクションに対する Google Web Toolkit の答えです。」(コーディングの基本から)シナリオでは、コンパイル時に一連のパラメーターに基づいて実装を提供しようとしているのではなく、実行時に提供しようとしています。

ここで GIN をさまざまな方法で使用できます。Widget がコンストラクターを介して DataSource インスタンスを取得することをお勧めします。その方法については、 GinTutorialを参照してください。数段落で説明するよりも、はるかにうまく説明できます。

于 2011-02-15T13:58:27.210 に答える