![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 38
|
__etc, я правда вас не понимаю. А что делать, если код устроен так, что нужно дождаться окончания чего-то? Вы понимаете, что ваши варианты с таймером не подходят, потому, что они все равно асинхронные?
Правильно ли я понимаю, что единственный прием, который сейчас используют разработчики на Флексе, чтобы создать синхронность — это посылка следующего запрос внутри обработчика получения предыдущего? Считаю, что это плохая практика, которая влечет за собой или очень сложную логику, которую также сложно модифицировать (из-за «запаха» Shotgun Surgery) или на что-то просто плюют и не делают все проверки. Сам считаю, что в такой стесненной ситуации самый правильный вариант сделать всю систему асинхронной. Это значит, что модель предметной области должна рассчитывать на то, что она может меняться в любой момент времени и должна на это корректно реагировать. Прошу, поругайте мою идею. А может есть еще какие-то приемы? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Специфика работы в ActionScript как раз и состоит в том, что загрузка любых данных, коннекты и прочее — асинхронно (нет никакой синхронности в ActionScript, все примеры кода, приведенные здесь, являются асинхронными). А для работы с асинхронными вызовами существует событийная модель, пишутся хендлеры, подписываются на соответствующие события и все довольны. Не говоря уже об отсутствии каких-либо неудобств (на мой взгляд). Да, код получается длиннее, зато мы не заботимся о контроле над потоком, потому что он всегда выполняется.
Собственно, вам требуется изучить основные моменты при работе с ActionScript 3.0. Мой пример кода просто делает таймаут на соединение и три попытки и, собственно, всё. Т. е. я ничего не дожидаюсь. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 38
|
__etc, событийная модель мне знакома. Она есть во многих языках и хорошо уживается с синхронными вызовами. Ваш код я понял.
Неудобство асинхронности в том, что все разбросано по методам. Если, например, по логике после connect надо будет загрузить объект А, то в WindWalker со совоим кодом нипишет: А вам придется делать load(A); в обработчики успешного подключения, хотя подключение и загрузка вещи не особенно связанные. То есть ваш код будет обладать низким зацеплением, если тут можно использовать этот термин. Ваш код сложнее модифицировать, его нельзя окинуть взглядом, так как он находится во множестве мест... Всё это плохие запахи. В итоге ветки, думаю, можно сделать такой вывод: ActionScript по сути асинхронен. Вместо того, чтобы пытаться сделать синхронные вызовы надо просто рассчитывать на это. Ваш код должен «понимать», что событие может произойти когда угодно и работать корректно в этих условиях. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Я бы сказал, что AS в сути вообще синхронности не содержит.
|
|
|||||
|
Регистрация: Dec 2005
Сообщений: 23
|
все-таки неудобно без синхронности. приведу пример:
для валидации форм используется класс Validator, а именно метод doValidation(...):Array, который возвращает результаты проверки. а что если я хочу проверить форму на сервере? как мне быть в таком случае? как раз тут неплохо было бы сделать sleep для потока исполнения программы и подождать что вернет сервер. Так сделать нельзя, поэтому приходиться отказываться от удобного инструмента Validator ![]() |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 38
|
Хотя прошел почти год — сегодня я написал небольшой пост про то, как мы в итоге поступили с синхронностью в КСИНО (в системе, разрабатывая которую я и задавал тут вопросы).
Суть в том, что мы сделали все асинхронным до мозга костей. В частности использовали паттерн Активная запись. Ссылка на пост. http://ksoftware.ya.ru/replies.xml?item_no=1970 |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:22. |
|
|
« Предыдущая тема | Следующая тема » |
|
|