![]() |
Еще один вопрос по архитектуре
Архитектура - это громко сказано, но все-таки.
Я не часто программирую на as, но каждый раз меня очень смущает получающаяся цепочка событий. То есть, загружаем какой-то мувик. Он подгружает xml, конец загрузки xml стартует загрузку, например картинок, загрузка картинок стартует какие-то эффекты итд итп. То есть цепочка бывает довольно большая? и когда я спустя неделю возвращаюсь к проекту, довольно тяжело распутывать все эти зависимости кто кого стартует. Я подозреваю, что есть способ как-то аккуратнее все это организовать. Интересно было бы узнать. |
ну а что не так, все вполне последовательно, наверное чтоб понимать, может следует комментировать методы, у вас их получается кот наплакал
|
Vier, вот и я, когда только начинал немного разбираться в AS3, хотел составить нейкие шаблоны для загрузки xml + картинки и т.д. Но, поверьте мне, всё уже проще простого, вот увидите через 2 месяца будете на автомате писать эти 2-3 метода за 2 минуты))
Добавлено через 1 минуту Киньте может код для примера? Подскажем что где заоптимизировать или упростить (если есть что :) ). |
Я решал такое создав набор классов, реализующий очередь действий.
Есть класс, реализующий загрузку XML и класс, загружающий картинки. Код AS3:
Все действия выполняются последовательно, в порядке добавления. Не сказал бы что при таком решении становится намного проще (: |
Цитата:
хотя это плодит в данном случае новые сущности |
Не совсем рефакторинг, скорее подход такой к созданию логики приложений (: Не всегда оправдано, но местами удобно.
|
Спасибо всем, да придется тогда лучше структурировать самому )
Пример кода вечером скину. Я уверен, что где-то я неправильно пишу. |
Division, хм... интересно, а по-подробнее о таких классах можно...
|
можно класс написать который принимает ссылку на xml и диспечеризирует событие с массивом уже загруженных файлов.
|
Цитата:
Только синглтон здесь нафиг не нужен - делаем асинхрнонную команду MacroAction, принимающую список асинхрнонных команд - и запускаем ее, можно делать вложенные списки комманд Там где логика ветвится - например в одном случае надо запускать одну цепочку - в другом другую - в акшене просто запускаем либо однин MacroAction, либо другой Где цепочка строго определена (у нас только в лоадере основной swf-ки используется) - можно подобием конвеера Потапенко воспользоваться, в других случаях он слишком НЕгибок. Но интуиция подсказывает, что обилие цепочек свидетельствует о хреново продуманной архитектуре - надо разруливать как-то по другому. (комманда - это всетки не эквивалент реального объекта) |
Division, у Вас addAction принимает экземпляр какого-то объекта. Как Вы узнаете, что делать - грузить из хмл, грузить картинку, грузить и парсить хмл? Информация о поведении хранится в передаваемых экземплярах классов?
|
Воспользуйтесь классом Conveyor Евгения Потапенко.
|
Знаете чего мне не хватает.
Допустим, мне нужно скачать xml, вытащить url картинки, скачать картинку, положить ее в мувик. Сейчас я делаю это так: создаю какой-нибудь метод типа init(), он запускает загрузку, создаю метод, который должен стартовать, когда загрузится xml, в нем я разбираю xml. После чего начинаю грузить фотку. Опять же, создаю метод который, ловит окончание загрузки. В котором, наконец, получаю картинку. В итоге, получаю 3 последовательно стартующих функции. Не знаю почему, но мне неудобно от такой асинхронности. Я хочу так: init() в нем сделали лоад, в следующей строчке работаем с уже готовым лоадером, то есть основной поток ждет пока лоадер загрузится, потом грузим картинку и вставляем ее в спрайт. Получается один метод, который вызывает последовательно три других. Так мне было бы удобнее. |
Ну так создайте лоадер, добавьте его в заранее приготовленный спрайт (если его наличие принципиально) и далее в эту конструкцию грузите что хотите. Наверное правильнее это было бы все в отдельном классе организовать. При этом лоадер у нас на сцене, он DisplayObject, отображается, может менять свои координаты и пр.
|
Цитата:
|
Цитата:
На это еще накладываются эвенты от событий и получается все не так стройно, как хотелось бы. |
Тоже пользуюсь addAction/ execute для отложенных действий.
Следующее действие начинаю по событию ACTION_END. Cами Action являются частью контроллера, т.е. в execute могут менять модель, либо напрямую менять вьюшки. Нечто вроде Command в pureMVC. Conveyor всё же немного не то.. |
Цитата:
PS насчет синглтона - да, наверно вариант expl с MacroAction более удобный. Я таким способом команды не юзал, поэтому сделал синглтоном. |
| Часовой пояс GMT +4, время: 00:15. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.