Код инициализации нашего приложения Flex выполняет серию асинхронных вызовов для проверки учетных данных пользователя, загрузки внешних данных, подключения к теме JMS и т. Д. В зависимости от контекста приложение , некоторые из этих вызовов не выполняются или не выполняются с различными параметрами.Работа с асинхронными структурами управления (Свободный интерфейс?)
Поскольку все эти вызовы происходят асинхронно, код, управляющий ими, трудно читать, понимать, поддерживать и тестировать. Для каждого вызова нам нужно иметь некоторый механизм обратного вызова, в котором мы решаем, какой вызов выполнить следующий.
Мне было интересно, если бы кто-нибудь экспериментировал с оберткой этих вызовов в исполняемых устройствах и имел Fluent Interface (FI), который будет подключать и управлять ими.
Из верхней части моей головы, код может выглядеть примерно так:
var asyncChain:AsyncChain = execute(LoadSystemSettings)
.execute(LoadAppContext)
.if(IsAutologin)
.execute(AutoLogin)
.else()
.execute(ShowLoginScreen)
.etc;
asyncChain.execute();
AsyncChain будет деревом исполнения, строить с ФИ (и мы, конечно, можем также построить один без FI) ,
Это может быть интересной идеей для сред, которые работают в однопоточной модели, как в Flash Player, Silverlight, JavaFX ?, ...
Перед тем, как погрузиться в код, чтобы попробовать вещи, я надеялся, чтобы получить некоторую обратную связь.
Update 19/03/2010: Мы создали экспериментальную Task API в проекте Spring ActionScript, которая обеспечивает контроль над асинхронными процессами. Мы будем рады получить обратную связь. http://www.springactionscript.org/docs/reference/html/the_operation_api.html#tasks