10 мая 2012

Guava Event Bus или как сохранить мозг

Каждый кто писал Swing-овые или любые другие UI-приложения скорее всего сталкивался с проблемой когда установка галочки на третьем по глубине вложенности модальном окне сильно влияет на ход событий в основном окне.

Проще говоря - ввод пользователя сильно влияет на то как дальше себя будет вести приложение.
Стандартным решением данного вопроса является создание иерархии listener-ов и протаскивание ее через код.

Этот подход работает, однако количество таких классов во времени будет расти, равно как и структурная эрозия кода, создаваемая ими. Можно конечно натянуть на это все DI/IoC - но тогда придется объяснять IoC/DI куда какие listener-ы подсовывать, то есть проблема просто переезжает из одного места в другое.


Лучом надежды, ИМХО, является паттерн Event Bus - одна из моделей реализации паттерна Publisher-Subscriber.

Суть заключается в том что все, абсолютно все типы событий пропускаются через одну шину, которая принимает внутрь себя все, и сама выполняет роль диспетчера.

При таком подходе через DI/IoC нужно протащить только саму шину, ну и зарегистрировать в ней все типы событий - от этого никуда не деться.

Получается чуть более аккуратно, но вполне возможно и более "прямо", проще отлаживать.
Это все только мои теоретические прикидки - будет случай попробую на практике.

Ссылки для ознакомления:
http://tomaszdziurko.pl/2012/01/google-guava-eventbus-easy-elegant-publisher-subscriber-cases/
http://codingjunkie.net/guava-eventbus/