Лучшая практика использования EventBus с компонентами GWT

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

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

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

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

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


person Dan L.    schedule 19.03.2012    source источник


Ответы (2)


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

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

person Abhijith    schedule 19.03.2012

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

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

person Joseph Lust    schedule 19.03.2012