私は図書館/ウィジェットにおける繰延結合および/または依存性注入の概念に少し苦労しています。 私は次の問題のための最善のアプローチを考え出します: いくつかのデータを取り込んで表示する可視化ウィジェット(コンポジット)を実装したいと思います。繰延バインディング/ GIN
実際の可視化部分からデータを取得する方法を分離したいと考えています。だから私はこのようになります一般的なインターフェース「データソース」を追加しました:
public interface DataSource {
public void fetch(int start, int end, boolean getFeatures,
DataSourceCallback callback);
}
を、私は私のウィジェットにセッターを追加します。
public void setDataSource(DataSource source) { this.source = source}
オーデルでのデータソースのようにHTTPをサポートするために、私はまた、抽象クラスを追加しましたこれはデータソースインタフェースを実装し、そのデフォルトコンストラクタにURLを取ります
public abstract class HttpDataSource implements DataSource {
protected String url;
public HttpDataSource(String url) {
this.url = url;
}
}
私の具体的なDataSouceは、この抽象クラスを拡張し、インタフェースの取得方法を実装しています。
public class MyDataSource extends HttpDataSource {
public MyDataSource(String url) {
super(url);
}
}
これはうまくいきます。 MyDataSourceクラスのインスタンスを作成して、それを私のウィジェットのセッターに渡すことができます。 私はウィジェットを幾分構成可能にしたいと思っています。私はこれがDependency InjectionかDeferred Bindingsのどちらかによって実行できることを知っています。
だから、一つのアプローチは、ウィジェットのユーザーが(それはGWT-ログライブラリーで行われている方法に類似:http://code.google.com/p/gwt-log/source/browse/trunk/Log/src/com/allen_sauer/gwt/log/gwt-log-impl.gwt.xml)モジュールのXMLファイルにデータソースを設定することができるようになり
<replace-with class="MyDataSource">
<when-type-is class="DataSource" />
<when-property-is name="source" value="MyDataSourceName" />
</replace-with>
しかし、私はそれが可能かどうかわかりません。なぜなら、MyDataSourceのコンストラクタにURLを渡すことによって、私は状態を持っています。 サイドノート:モジュールのXMLファイルにURLを設定することは可能でしょうか?
私は、私は別のソリューションを使用することになり仮定
(それが延期結合に干渉しない?)も、このウィジェット/ライブラリを使用する人々が自分のデータソースを実装し、ウィジェットに渡すことができた場合に心配しています可視化ウィジェット/ライブラリを使用する親アプリケーションの依存性注入(URLをどのように渡すことができますか?私はおそらく工場を注入する必要がありますか?)
これらの2つのソリューションのどちらが優れていますか?この問題を解決するために遅延バインディングやGINを使用する感覚はありますか?
おかげで事前に
Uemit
返信いただきありがとうございますが、この例では延期されたバインディングは実行可能ではありませんか?たとえば、gwt-log(私のメッセージのリンクを参照)は、遅延バインディングを使用してコンパイル時に特定のLogger(ConsoleLogger、FirebugLogger)を設定します。 DataSourceの例でも同じことができますか? –
@ TimeuデータソースにはURLが格納されています。特に同じソースポリシー(http://en.wikipedia.org/wiki/Same_origin_policy)を考慮した場合、URLのようなものはコンパイル時には判別できません。 –
SOPに違反するURLを使用しても、相対URLを使用する場合は、モジュールのxmlファイルでURLを設定することはできません。通常、コンパイル時に、アプリケーションで使用する対応するURLを持つ特定のDataSource実装を知っています。 –