Как события реализуются в MVP - PullRequest
0 голосов
/ 16 января 2012

Я прошел по ссылке , но мне было немного трудно понять основную причину того, почему

  1. мы не должны использовать view.getSaveButton().addClickHandler().... то есть сказать, почему у нас не должно быть геттера в нашем интерфейсе дисплея ??,Из этого видео я понял, что не следует поддерживать информацию о состоянии представлений в презентации, но, к сожалению, я не понял, как это нам поможет.?

  2. В этом видео также упоминается, что мы должны использовать setListeners() вместо addListeners(), чтобы избежать более одного слушателя в интерфейсе.

  3. Он говорит, что он расходится с лучами понимания MVP, относительно того, чтобы не использовать HasClickHandlers(), объясните, пожалуйста, почему?

Одна из причин, по которой я не мог понять, может заключаться в том, что в этом видео содержится много специфического кода для Google Wave. Мне было бы легче понять, если бы он использовалболее общий и более простой код, чтобы заставить нас понять его точку зрения.

Прошу прощения, если я кого-то обидел.

1 Ответ

0 голосов
/ 17 января 2012

1) Presenter не должен зависеть от виджетов UI - для этого есть несколько причин:

  • Разделение представления пользовательского интерфейса в представлениях и логики приложения в Presenter
  • Определено в интерфейсах поведение View и Presenter
  • Легко написать модульные тесты для слоя презентатора
  • Несколько представлений (рабочий стол, мобильный телефон и т. Д.) Для одного докладчика

Простой набор интерфейсов с именем MVP позволяет нам разделить эти два слоя:

 

// View interface 
interface View extends AsWidget {

    void setPresenter(Presenter presenter); // cross reference to presenter

    interface Presenter { // presenter must extends from this interface
        void onContactEditClick(); // callback from view handling in presenter without any UI code
    }
}


// View realization (part)
public class ViewImpl extends Composite implements View {

    @UiHandler('someButton') // or 'somelink', e.t.c.
    void onContactEditClick(ClickEvent event) {
        presenter.onContactEditClick();
    }
}

Ведущий изолирован от элементов управления, которые запускают события. Это может быть кнопка, может быть ссылка, e.t.c. Таким образом, можно создать несколько реализаций представлений (например, для настольных и мобильных платформ) с различным набором элементов управления пользовательским интерфейсом в каждом представлении и использовать эти представления с одним докладчиком.

Google MVP

2) Слушатели связаны с элементами управления пользовательского интерфейса. На мой взгляд, лучше избегать использования слушателей между представителем и докладчиком с помощью методов интерфейса, как в примере Point1. На самом деле интерфейс Presenter внутри интерфейса View является лучшим слушателем всех событий из представления.

3) То же самое. HasClickHanlers относится к слою View и должен быть отделен от презентатора.

...