我在库/小部件中的延迟绑定和/或依赖注入的概念上有点挣扎。我尝试想出解决以下问题的最佳方法:我想实现一个可视化小部件(复合),它接收一些数据并显示它。
我想将检索数据的方式与实际的可视化部分分开。所以我添加了一个通用接口“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 类的实例,将它传递给我的小部件的设置器。现在我想让小部件有点可配置。我知道这可以通过依赖注入或延迟绑定来完成。
因此,一种方法是允许小部件的用户在模块 XML 文件中设置 DataSource(类似于它在 gwt-log 库中完成的方式:http ://code.google.com/p/gwt-日志/源/浏览/主干/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 等?我可能必须注入工厂?)
这两种解决方案中哪一种更好?一般来说,使用延迟绑定或 GIN 来解决这个问题是否有意义?
提前致谢
发射