12 нояб. 2009 г.

Tagged EventBus

Развивая идею loose coupling, заложенную в паттерне EventBus, хочу предложить полезное, на мой взгляд, улучшение — тэгирование событий.

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

Например, один объект хочет слушать открытие любых попапов, а другой — только попапов авторизации.

В таком случае, обычные попапы при открытии посылают событие примерно так:

$.eventBus.trigger('popup open');

Попапы с авторизацией так:

$.eventBus.trigger('popup auth open');

Те слушатели, которые хотят слушать открытие любых попапов, включая попапы авторизации, подписываются так:

$.eventBus.bind('popup open', handlerForPopups);

А те, которые слушают открытие только попапов авторизации, так:

$.eventBus.bind('popup auth open', handlerForAuthPopup);

Т.е. если множество тэгов при bind является подмножеством множества тэгов при trigger — то обработчик события срабатывает.

Простейшую реализацию Tagged EventBus можно скачать с code.google. UPD: реализация допилена

3 комментария:

Анонимный комментирует...

Может я конечно чего-то не понял. Но раз вы используете jquery то там уже есть что-то типа тегирования событий, только это неймспейсами там называется.

alpha комментирует...

Нет, неймспейсы работают ровно наоборот - если множество неймспейсов при trigger является подмножеством множества неймспейсов при bind, то обработчик сработает. Для реализации моей идеи нужно обратная логика.

Вегед! комментирует...

;-)