Каждый кто писал 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/
эм, вот с "на третьем по глубине вложенности модальном окне" не согласен.
ОтветитьУдалитьибо сама конструкция модальности, подразумевает необходимость появления узкого места. если посмотреть на реализацию того же делфячного VCL, там практически сознательно перекрыт хэндлинг событий из чайлодвого модального окошка и приходится все это выковыривать "полухаком".
так что, как минимум странно, протаскивать ивенты в парентовое окно, пока не закончена работа с чайлдом. вопчем для модальных штук тема как то не очень, имхо :)
ну "на третьем по глубине вложенности модальном окне" - это только аллегория ситуации.
УдалитьСуть в том что иерархия слушателей иногда имеет место быть весьма и весьма глубокой.