我们的 Flex 应用程序的初始化代码正在执行一系列异步调用,以检查用户凭据、加载外部数据、连接到 JMS 主题等。根据应用程序运行的上下文,其中一些调用不会被执行或执行不同的参数。
由于所有这些调用都是异步发生的,因此控制它们的代码很难阅读、理解、维护和测试。对于每个调用,我们需要一些回调机制来决定接下来要执行的调用。
我想知道是否有人尝试过将这些调用包装在可执行单元中并拥有一个可以连接和控制它们的 Fluent Interface (FI)。
从我的脑海中,代码可能看起来像:
var asyncChain:AsyncChain = execute(LoadSystemSettings)
.execute(LoadAppContext)
.if(IsAutologin)
.execute(AutoLogin)
.else()
.execute(ShowLoginScreen)
.etc;
asyncChain.execute();
AsyncChain 将是一个执行树,使用 FI 构建(当然我们也可以构建一个没有 FI 的树)。
对于在 Flash Player、Silverlight、JavaFX 等单线程模型中运行的环境,这可能是一个有趣的想法?...
在我深入研究代码尝试之前,我希望能得到一些反馈。
2010 年 3 月 19 日更新 :我们在 Spring ActionScript 项目中创建了一个实验性的 Task API,提供对异步进程的控制。我们很乐意得到反馈。 http://www.springactionscript.org/docs/reference/html/the_operation_api.html#tasks
最佳答案
我做过类似的事情,专门用于应用程序的初始化。但是,由于我们使用 Flex 开发大多数 Flash 应用程序,因此我在编写它时考虑了 MXML 的使用。
语法看起来就像声明一个数组(我只是在编造标签,但你明白了):
<Initialize>
<DisplayPreloader />
<LoadConfiguration id="configurationLoader" source="foo.xml" />
<ParseConfiguration source="{configurationLoader.result}" />
<!-- ... --->
</Initialize>
使用诸如 IMXMLObject 之类的接口(interface),只需将其放入应用程序中就可以很好地工作,嘿,这就是您的初始化代码。当然,这不一定是为了初始化,它可以应用于任何地方。
值得注意的优点:
显着缺点:
关于apache-flex - 处理异步控制结构(Fluent Interface?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945666/