Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.01.2009, 00:11
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 51  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
__etc, я правда вас не понимаю. А что делать, если код устроен так, что нужно дождаться окончания чего-то? Вы понимаете, что ваши варианты с таймером не подходят, потому, что они все равно асинхронные?

Правильно ли я понимаю, что единственный прием, который сейчас используют разработчики на Флексе, чтобы создать синхронность — это посылка следующего запрос внутри обработчика получения предыдущего?

Считаю, что это плохая практика, которая влечет за собой или очень сложную логику, которую также сложно модифицировать (из-за «запаха» Shotgun Surgery) или на что-то просто плюют и не делают все проверки.

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

Прошу, поругайте мою идею. А может есть еще какие-то приемы?

Старый 10.01.2009, 00:17
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 52  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Специфика работы в ActionScript как раз и состоит в том, что загрузка любых данных, коннекты и прочее — асинхронно (нет никакой синхронности в ActionScript, все примеры кода, приведенные здесь, являются асинхронными). А для работы с асинхронными вызовами существует событийная модель, пишутся хендлеры, подписываются на соответствующие события и все довольны. Не говоря уже об отсутствии каких-либо неудобств (на мой взгляд). Да, код получается длиннее, зато мы не заботимся о контроле над потоком, потому что он всегда выполняется.

Собственно, вам требуется изучить основные моменты при работе с ActionScript 3.0. Мой пример кода просто делает таймаут на соединение и три попытки и, собственно, всё. Т. е. я ничего не дожидаюсь.

Старый 10.01.2009, 01:01
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 53  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
__etc, событийная модель мне знакома. Она есть во многих языках и хорошо уживается с синхронными вызовами. Ваш код я понял.

Неудобство асинхронности в том, что все разбросано по методам. Если, например, по логике после connect надо будет загрузить объект А, то в WindWalker со совоим кодом нипишет:
Код:
connect();
load(A);
А вам придется делать load(A); в обработчики успешного подключения, хотя подключение и загрузка вещи не особенно связанные. То есть ваш код будет обладать низким зацеплением, если тут можно использовать этот термин. Ваш код сложнее модифицировать, его нельзя окинуть взглядом, так как он находится во множестве мест... Всё это плохие запахи.

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

Старый 10.01.2009, 01:51
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 54  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Я бы сказал, что AS в сути вообще синхронности не содержит.

Старый 06.02.2009, 16:04
Jean вне форума Посмотреть профиль Отправить личное сообщение для Jean Найти все сообщения от Jean
  № 55  
Ответить с цитированием
Jean

Регистрация: Dec 2005
Сообщений: 23
все-таки неудобно без синхронности. приведу пример:
для валидации форм используется класс Validator, а именно метод doValidation(...):Array, который возвращает результаты проверки. а что если я хочу проверить форму на сервере? как мне быть в таком случае?

как раз тут неплохо было бы сделать sleep для потока исполнения программы и подождать что вернет сервер. Так сделать нельзя, поэтому приходиться отказываться от удобного инструмента Validator

Старый 16.09.2009, 12:41
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 56  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
Хотя прошел почти год — сегодня я написал небольшой пост про то, как мы в итоге поступили с синхронностью в КСИНО (в системе, разрабатывая которую я и задавал тут вопросы).

Суть в том, что мы сделали все асинхронным до мозга костей. В частности использовали паттерн Активная запись.

Ссылка на пост.
http://ksoftware.ya.ru/replies.xml?item_no=1970

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.