С MVP вы обычно связываете представление (UI) с Presenter в Presenter. Однако с последней версией GWT, особенно с UIBinding, вы можете делать следующее в представлении:
@UiHandler("loginButton")
void onAboutClicked(ClickEvent event)
{
// my login code
}
Который в основном обменивает много анонимного внутреннего кода класса на некоторый быстрый код аннотации. Очень хорошо!! Проблема в том, что этот код отображается, а не ведущий ...
Так что я подумал:
@UiHandler("loginButton")
void onAboutClicked(ClickEvent event)
{
myPresenter.onAboutClicked(...);
}
Но есть несколько проблем с этим подходом. Самое главное, вы стираете грани между View и Presenter. Кто выполняет привязку, в некоторых случаях это представление, в других - презентатор (привязка к событиям, которых нет в текущем представлении, но которые необходимо присоединить - например, общесистемное событие обновления).
Вы по-прежнему получаете преимущество от возможности модульного тестирования своего докладчика, но какой ценой. Ответственность теперь грязная. Например, привязка иногда выполняется в представлении, а иногда - на уровне докладчика. Я вижу, как со временем код впадает во все виды хаоса.
Я также думал о том, чтобы расширить Presenter для View, чтобы вы могли сделать это в View. Проблема здесь в том, что вы теряете способность докладчика запускать стандартные модульные тесты! Это серьезная проблема. Это и линии снова становятся размытыми.
Итак, мой вопрос, есть ли у кого-нибудь хороший способ воспользоваться аннотацией UIBinding в шаблоне MVP, не размывая линии и не теряя преимущества шаблона MVP?