Лучшая практика использования EventBus с компонентами GWT - PullRequest
3 голосов
/ 19 марта 2012

Скажем, у меня есть компонент C, который используется в моем приложении в двух местах.Например, у меня есть список папок, которые отображаются на 2 вкладках.Когда пользователь переименовывает папку в одной части, это изменение должно отражаться и в другой.

Я думаю использовать для этого EventBus и сделать компонент папок для запуска события EventBus, скажем FolderChangedEvent.Это событие будет перехвачено вторым компонентом папки, который автоматически обновит свой список папок.

Вопрос в том, что если в какой-то момент я захочу использовать этот компонент папки в 3-м месте, это место также будетобновите список папок.Это может быть нежелательным поведением приложения.

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

Что является наилучшей практикой для этого случаяи как эффективно использовать EventBus?

Ответы [ 2 ]

5 голосов
/ 20 марта 2012

Назначение шины событий - облегчить обработку событий и сделать код более читабельным и управляемым.Я отвечу на этот вопрос, предполагая, что ваша дилемма заключается в том, как классифицировать события.

В классе GWTEvent есть метод source ().Это говорит вам, кто запустил событие.Если это неприемлемо, в вашем событии всегда может быть поле «id», которое заполняется отправителем.Таким образом, если TreeView1 запускает событие, идентификатор события будет установлен на «treeView1».Когда обработчик события получает это событие, он проверит идентификатор и определит, обрабатывать ли событие или нет.Таким образом, вы можете использовать один обработчик событий «Бог» для всего вашего приложения.

0 голосов
/ 20 марта 2012

EventBus удобен для базовых реализаций, но я обнаружил, что в сложных приложениях есть необходимость отправлять данные вместе с событием, например, новый NyObject, который был создан при возникновении события MyObjectCreated.

В библиотеке GWT-Structs есть хорошая реализация.См. пример из Динамическая привязка издатель-подписчик , чтобы узнать, как можно передавать данные типизированным издателям и подписчикам.

...