Я работаю с проектом GWT, и возникает ситуация, когда я хочу создать отдельную шину событий для разных модулей в одном проекте. GWT предоставляет единую шину событий для всего проекта, которую мы можем использовать для подключения модулей. Теперь я не хочу использовать одну и ту же шину событий и хочу, чтобы шина событий для конкретного модуля могла обрабатывать события, связанные только с этим модулем. Есть ли механизм для достижения такого сценария? Позволяет ли GWT создавать несколько шин событий в одном проекте? если да, то как реализовать и использовать.?
Как создать шину событий для ребенка/модуля в GWT?
comment
Я думаю, вы имеете в виду mvp4g .. пожалуйста, укажите, используете ли вы какую-либо конкретную структуру или библиотеку в gwt или хотите решение, основанное на простом ванильном gwt
- person Gautam   schedule 27.06.2016
Ответы (2)
Хотя это выглядит хорошей идеей, наличие нескольких EventBus усложнит ваш проект. И, как вы, возможно, знаете, JavaScript является однопоточным, и любой код Java, который вы пишете в GWT, будет преобразован в JavaScript. Таким образом, не будет никаких преимуществ, полученных от наличия Multiple EventBus.
И если вы найдете время, прочитайте это. Это может быть интересно.
person
Beniton
schedule
24.05.2016
НЕТ, я думаю, что это не увеличит сложность, но выделит события, характерные для модуля, в будущем может возникнуть ситуация, когда мне придется создать новый проект, который будет включать только этот модуль. то есть модульно/функционально, я смогу создавать различные проекты на основе модулей с их шиной событий.
- person Pratik Rawlekar; 24.05.2016
@PratikRawlekar Но даже в этом случае вам не нужно иметь несколько шин событий. У нас был проект, в котором мы расширили EventBus и разделили его между модулями. Основная причина, по которой мы расширились, заключалась в том, чтобы инструментировать события, происходящие в приложении.
- person Beniton; 24.05.2016
Взгляните на mp4g (github.com/mvp4g/mvp4g/wiki/05 .-Разделение кода). каждый модуль имеет шину событий. вы можете определить, будет ли событие видимым глобально или только в вашем модуле.
- person El Hoss; 24.05.2016
Видимость @EI Hoss не является проблемой, я просто хочу отделить события, относящиеся к конкретному модулю, т. Е. EventBus будет содержать события, которые полезны только в этом модуле.
- person Pratik Rawlekar; 24.05.2016
@PratikRawlekar С какой именно проблемой вы сталкиваетесь при разделении событий, характерных для модулей?
- person Beniton; 24.05.2016
@Pratik: это то, что делает шина событий модуля. Если вы хотите, чтобы событие модуля было видно другим модулям, вы должны указать, что событие.
- person El Hoss; 24.05.2016
Вы можете добиться этого с помощью инъекции джина, выполнив следующие шаги, если джин настроен
<сильный>1. Создайте шины событий как:
public interface EventBusOne extends EventBusWithLookup {}
public interface EventBusTwo extends EventBusWithLookup {}
<сильный>2. свяжите обе шины в модуле gin, созданном для приложения gwt, как:
bind(EventBusWithLookup.class).annotatedWith(Names.named("EventBusOne")).toProvider(EventBusOneProvider.class).in(Singleton.class);
bind(EventBusWithLookup.class).annotatedWith(Names.named("EventBusTwo")).toProvider(EventBusTwoProvider.class).in(Singleton.class);
<сильный>3. Создайте пользовательских поставщиков как:
public class EventBusOneProvider implements Provider<EventBusWithLookup> {
@Override
public EventBusWithLookup get() {
return GWT.create(EventBusWithLookup.class);
}
}
public class EventBusTwoProvider implements Provider<EventBusWithLookup> {
@Override
public EventBusWithLookup get() {
return GWT.create(EventBusWithLookup.class);
}
}
<сильный>4. Внедрите шину событий в своих докладчиков или где угодно, например:
@Inject
public void setEventBus(@Named("EventBusOne") Provider<EventBusWithLookup> eventBus) {
this.eventBus = eventBus;
}
@Inject
public void setEventBus(@Named("EventBusTwo") Provider<EventBusWithLookup> eventBus) {
this.eventBus = eventBus;
}
person
vsbehere
schedule
26.05.2016