我在庫/小部件中使用延遲綁定和/或依賴注入的概念掙扎了一下。 我試圖想出以下問題的最佳方法: 我想實現一個可視化窗口小部件(複合),它接收一些數據並顯示它。GWT小部件/庫中的延遲綁定/ GIN
我想分開實際可視化部分的數據檢索方式。所以我增加了一個通用接口「數據源」,它看起來是這樣的:
public interface DataSource {
public void fetch(int start, int end, boolean getFeatures,
DataSourceCallback callback);
}
,我添加setter到我的小工具:
public void setDataSource(DataSource source) { this.source = source}
在奧得河,支持斷點續傳像數據源我還添加了一個抽象類它實現了DataSource接口,並需要一個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類的實例,將它傳遞給我的小部件的setter。 現在我想讓這個小部件有點可配置。我知道這可以通過依賴注入或延遲綁定來完成。
所以一個辦法是讓小部件的用戶設置模塊XML文件中的數據源(類似它在GWT-日誌庫做的方式: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?
我也很擔心,如果誰使用這個小工具的人/庫可以實現自己的數據源,並把它傳遞給小部件(不將其與延遲綁定干擾?)
我想另一個解決方案是使用在使用可視化小部件/庫的父應用程序中的依賴注入(如何傳遞url等等?我可能必須注入一個工廠?)
這兩個解決方案中的哪一個更好,感覺使用延遲綁定或GIN來解決這個問題?
在此先感謝
Uemit
感謝您的回覆,但爲什麼不應該延遲綁定在這個例子中可行?例如gwt-log(參見我的消息中的鏈接)使用延遲綁定在編譯期間配置特定的Logger(ConsoleLogger,FirebugLogger)。對於我的DataSource示例,我可以擁有相同的東西嗎? –
@Timeu數據源保存URL;在編譯時無法確定URL之類的東西,特別是當你考慮[同源策略](http://en.wikipedia.org/wiki/Same_origin_policy)時。 –
當然,如果我使用違反SOP的URL,但如果我使用相對URL,不應該也可以在模塊的xml文件中配置URL嗎?通常我在編譯期間已經知道哪個特定的DataSource實現有我想要在我的應用程序中使用的對應URL。 –