ライブラリ/ウィジェットでの遅延バインディングおよび/または依存性注入の概念に少し苦労しています。次の問題に対する最善のアプローチを考え出そうとしています。データを取り込んで表示する視覚化ウィジェット (コンポジット) を実装したいと考えています。
データを取得する方法を実際の視覚化部分から分離したいと考えています。そこで、次のような汎用インターフェイス「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 を使用することは理にかなっていますか?
前もって感謝します
ウエミット