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/


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

  1. эм, вот с "на третьем по глубине вложенности модальном окне" не согласен.
    ибо сама конструкция модальности, подразумевает необходимость появления узкого места. если посмотреть на реализацию того же делфячного VCL, там практически сознательно перекрыт хэндлинг событий из чайлодвого модального окошка и приходится все это выковыривать "полухаком".
    так что, как минимум странно, протаскивать ивенты в парентовое окно, пока не закончена работа с чайлдом. вопчем для модальных штук тема как то не очень, имхо :)

    ОтветитьУдалить
    Ответы
    1. ну "на третьем по глубине вложенности модальном окне" - это только аллегория ситуации.
      Суть в том что иерархия слушателей иногда имеет место быть весьма и весьма глубокой.

      Удалить