Я немного борюсь с концепцией отложенного связывания и / или внедрения зависимости в библиотеки / виджеты.Я пытаюсь найти лучший подход для решения следующей проблемы: я хочу реализовать виджет визуализации (составной), который принимает некоторые данные и отображает их.
Я хочу отделить способ извлечения данных от фактической части визуализации.Поэтому я добавил универсальный интерфейс «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 расширяет этот абстрактный класс и реализует метод выборки интерфейса:
public class MyDataSource extends HttpDataSource {
public MyDataSource(String url) {
super(url);
}
}
Это хорошо работает.Я могу создать экземпляр класса MyDataSource и передать его установщику моего виджета.Теперь я хочу сделать виджет несколько настраиваемым.Я знаю, что это можно сделать с помощью инъекции зависимостей или отложенных привязок.
Таким образом, один из подходов - позволить пользователю виджета установить источник данных в XML-файле модуля (аналогично тому, как это делается в библиотеке 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, у меня есть состояние, и я не уверен, как это работает с отложенным связыванием.URL-адрес также настроен в XML-файле модуля?
Меня также беспокоит, могут ли люди, использующие этот виджет / библиотеку, реализовать свой собственный DataSource и передать его виджету (не мешает ли это отложенному связыванию).?)
Я полагаю, что другое решение будет использовать внедрение зависимостей в родительском приложении, которое использует виджет / библиотеку визуализации (как можно передать URL-адрес и т. Д. Я, вероятно, должен ввести Factory?)
Какое из этих двух решений лучше, и в целом имеет ли смысл использовать отложенное связывание или GIN для решения этой проблемыlem?
заранее спасибо
Uemit