Я использую GWT MVP для разработки приложения. Я видел, что у нас может быть два типа обработчиков событий в коде GWT MVP, но я не очень уверен, какой из них мне следует использовать в каком месте:
1) HandlerManager (eventBus) Обработчики событий (например, EditEventHandler
ниже) в AppController
:
eventBus.addHandler(EditEvent.TYPE,
new EditEventHandler() {
public void onEdit(EditEvent event) {
doEdit(event.getId()); // this would open a new screen, call AsyncService etc
}
});
Я понимаю, что такие обработчики событий используются для обработки настраиваемых событий в масштабе всего приложения.
2) Обработчики событий GUI / View (например, ClickHandler
) в Presenter
, где я обрабатываю событие GUI, а затем запускаю событие приложения, чтобы вызвать его обработчик, как показано ниже:
display.getList().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
int selectedRow = display.getClickedRow(event);
if (selectedRow >= 0) {
String id = myDetails.get(selectedRow).getId();
eventBus.fireEvent(new EditEvent(id)); // this in turn would invoke the EditEventHandler above
}
}
});
Теперь мои вопросы:
1) Почему нам нужно писать EventHandler для событий приложения (например, EditEvent
), а не добавлять этот код непосредственно в связанный обработчик событий графического интерфейса (например, addClickHandler
)?
2) Разве мы не можем написать код для открытия нового экрана, вызова AsyncService и т. Д. Непосредственно в методе GUI EventHandler, например onClick
?
3) Разве это не сделает ваш код более читабельным, поскольку инициируемое событие и работа, которую необходимо выполнить, находятся в одном месте, т.е.Presenter
, и вам не нужно переключаться между вашим Presenter
кодом и AppController
код?