Развивая идею 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 то там уже есть что-то типа тегирования событий, только это неймспейсами там называется.
Нет, неймспейсы работают ровно наоборот - если множество неймспейсов при trigger является подмножеством множества неймспейсов при bind, то обработчик сработает. Для реализации моей идеи нужно обратная логика.
;-)
Отправить комментарий