Прикрепление прослушивателя событий ко всем URLRequest

#apache-flex #flash-builder #flexbuilder #flex4.5

#apache-flex #flash-builder #flexbuilder #flex4.5

Вопрос:

У нас есть приложение flex, которое подключается к прокси-серверу, который обрабатывает аутентификацию. Если время ожидания проверки подлинности истекло, прокси-сервер возвращает строку ошибки в формате json. Что я хотел бы сделать, так это проверить каждый ответ URLRequest и проверить, есть ли сообщение об ошибке, и отобразить его в клиенте flex, а затем перенаправить обратно на экран входа в систему.

Итак, мне интересно, возможно ли создать прослушиватель событий для всех URLRequests глобальным образом. Без необходимости поиска по проекту и добавления какого-либо метода к каждому URLRequest. Есть идеи, возможно ли это?

Ответ №1:

Если вы не используете только одну службу, невозможно установить глобальный обработчик URLRequest. На вашем месте я бы больше подумал о правильной архитектуре вашего приложения с помощью делегата и всегда проверял результат с помощью определенной службы, которая используется во всем приложении.

Комментарии:

1. К сожалению, и, возможно, неудивительно, что это большой унаследованный внешний беспорядок кода. О перестройке архитектуры не может быть и речи

2. @RueTheWhirled Вам все равно придется их менять… может быть, вам следует воспользоваться возможностью немного реорганизовать код и ввести делегата?

Ответ №2:

У J_A_X есть несколько хороших предложений, но я бы пошел немного дальше. Позвольте мне сделать некоторые предположения, основанные на ограниченной информации, которую вы предоставили.

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

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

В зависимости от того, насколько тесно переплетено ваше приложение (поверьте мне, я унаследовал некоторые довольно неприятные вещи, поэтому я знаю, что это может быть легче сказать, чем сделать), вы можете обнаружить, что проще всего удалить все эти различные службы и заменить их, заставив все ваши представления отправлять всплывающее событие, котороепопадает на верхний уровень. На верхнем уровне вы реагируете на это событие, вызывая один экземпляр вашей службы, который снова обрабатывается в одном месте.

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

Ответ №3:

Сможете ли вы расширить класс и добавить прослушиватель событий в конструктор объекта? Мне не нравится этот подход, но он может сработать.

Вам просто нужно будет выполнить поиск / заменить весь проект.