2013-03-18 3 views
0

У меня есть презентатор, который делает вызовы обработчику и получает данные с сервера Те же самые данные необходимы для другого виджета, который представляет собой миниатюрную версию существующего представления, но это будет отображаться все время в приложении.Обработка общих вызовов с использованием GWTP

Здесь у меня есть общие вызовы обработчику, тому же обработчику и объектам действий.

Каков наилучший способ дизайна.

Мое возможное решение: 1) Написание одного класса Common, имеющего доступ к объекту диспетчера (Inject via Ginjector), используйте методы для получения данных. Но в соответствии с архитектурой MVP использование диспетчера ограничивается только презентатором, но это класс без указателей.

ответ

1

AFAIK ничего не сообщил о MVP, в котором говорится, что все должно быть сделано в Presenter. Имеет смысл инкапсулировать логику, которая является общей для нескольких Presenters в одном общем классе.

MVP скорее образец, чем правило, написанное на камне. Поэтому, когда имеет смысл, вы можете немного отклониться от шаблона.

IMHO общий класс - это правильный подход.
Использование общего класса для обработки запросов к серверу также упрощает реализацию кэширования и аутентификации, например.

Есть два способа сделать связь между вашим Presenters и общий класс:

  1. Вводит одноэлементный экземпляр вашего общего класса во все Presenters, которые нуждаются в данных. От ведущего вы можете вызвать метод в общем классе и зарегистрировать обратный вызов.
  2. Инжектируйте глобальный EventBus в общий класс и сгореть Event (т.е. LoadDataEvent) из соответствующего Presenters и обрабатывать этот Event в общем классе. Когда данные получены от бэкэнда, вы можете запустить другой Event (то есть DataLoadedEvent) из общего класса и обработать его в соответствующем Presenters.

Решение 1, вероятно, легче осуществить, но у вас есть какой-то связи между общим классом и Presenter (это не так уж плохо, если вы используете инъекции зависимостей).

Решение 2 требует немного больше кода (вы должны определить события), но обеспечивает большую гибкость и де-сцепление. Например, если вы создаете новый Presenter, который также интересуется данными, вам просто нужно зарегистрировать обработчик для DataLoadedEvent в Presenter, и все готово.

+0

Упустите эти обе опции, на мой взгляд, я деился, чтобы пойти с опцией 1 .... В моем случае я должен сломать MVP-арку, поскольку это не помогает мне ............ – JAVAC

1

Если вы используете шину событий, ваш ведущий (который вызывает вызовы обработчику) может запускать события с новыми данными, а ваш миниатюрный виджет может регистрироваться на шине событий для их получения. Таким образом, только один ведущий будет обращаться к серверу, и что-либо на клиенте может быть уведомлено с помощью событий.

+0

Здесь проблема заключается в том, что фактическое представление не создается, но данные о миниатюрных виджетах нужны. – JAVAC

+0

Возможно, тогда это должен быть миниатюрный виджет, получающий данные с сервера, а когда создается другой виджет, вы можете снова обновить данные. – Laco

Смежные вопросы