Я работаю с приложением, которое изначально предназначалось для интенсивного использования статических переменных и функций для наложения однотонного доступа к объектам. Я использовал Parsley, чтобы разорвать часть сцепления в этом проекте, и я хотел бы начать измельчение при использовании статических функций.Статические функции или события в Flex?
Сначала я объясню основную архитектуру, и тогда я задам свои вопросы.
Внутри этого приложения существует статическая утилита, которая отправляет/принимает HTTP-запросы. Когда компонент желает запрашивать данные через HTTP, она вызывает статическую функцию в этом классе:
Utility.fetchUrl(url, parameters, successHandler, errorHandler);
Эта функция вызывает другую статическую функцию в компоненте отслеживания, который отслеживает, как долго запросы принимать, сколько будут отправлены, и т.д. вызов очень похож на класс полезности:
public static function fetchUrl(...):void {
Tracker.startTracking(url, new Date());
...
Tracker.stopTracking(url, new Date());
}
Любые компоненты в данной заявке, желающей послать запрос HTTP должен сделать это через класс веб-утилиты. Это создает довольно небольшую связь между этим классом и другими компонентами, и это всего лишь один пример из нескольких, где такая зависимость от статических функций существует. Это вызывает проблемы при расширении и реорганизации системы: я хотел бы отделить это от использования событий.
В конечном счете, я хотел бы, чтобы каждый компонент создавал настраиваемое событие, которое отправляется на высокоуровневую структуру. Оттуда сама инфраструктура переведет событие в правильное место. Другими словами, те компоненты, которые нужно выполнить запрос HTTP направит событие так:
dispatchEvent(new WebRequestEvent(url, parameters, successHandler, errorHandler));
От там, петрушка (или другая структура) будет убедиться, что событие отправляется в нужное место, которое может обрабатывать функциональность и выполнять все необходимое. Это также позволило бы мне создать более разделенную архитектуру MVC, где результаты веб-запросов обрабатываются моделями, внедряемыми каркасом в их собственные соответствующие представления.
Я хотел бы сделать то же самое с функцией отслеживания.
Есть ли недостатки в использовании механизма, основанного на событиях, в сочетании с каркасом, подобным Parsley? Лучше ли придерживаться статических функций/переменных и использовать доступ в одноэлементном стиле? Если да, то почему? В конечном итоге это вызовет больше проблем в будущем, чем это стоит?
Я бы определенно пошел с Events и использовал архитектуру Command Pattern для веб-запросов. Пожар события -> создать объект команды -> выполнить. Экземпляр объекта команды обрабатывает запрос и результаты, а также события сбоя. Это довольно легко реализовать, я напишу полный ответ немного. –
Я согласен с Ian в том, что с использованием какого-то MVC, в котором у вас есть контроллер, ответственный за захват событий, и выполнение соответствующих команд или цепочек команд - хороший способ пойти. Я не думаю, что избегать одиночных или статических методов только ради этого помогает вам обязательно. Далее я видел случаи, когда вещи становятся беспорядочными с использованием фреймворков MVC, когда дело доходит до модулей Flex, поэтому, конечно, сделайте домашнее задание, если вы планируете интенсивно использовать модули. Cairngorm работает, но в итоге у вас много ненужных классов событий, к счастью, кто-то создал мою собственную работу, гораздо приятнее. – shaunhusain
Реальный вопрос, который вы должны задать: «какую проблему я пытаюсь решить, перейдя на« События »?». Вы нанесли некоторые ограничения в архитектуре или просто пытаетесь сделать код чище? Нет ничего изначально неправильного в отношении статики/одиночек. – Glenn