作者
Moxie Zhang译者
张龙
发布于
2008年12月10日 上午4时47分
<dl class="tags2"><dt class="community">社区</dt><dd><a href="http://www.infoq.com/cn/java" name="java" id="739" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Java</a></dd><dt class="topics">主题</dt><dd><a href="http://www.infoq.com/cn/ria" name="ria" id="777" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">RIA</a></dd><dt class="topics">标签</dt><dd><a href="http://www.infoq.com/cn/actionscript" name="actionscript" id="4,907" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">ActionScript</a></dd></dl>
<p><a href="http://gemvc.riaforge.org/">GEMVC</a> ActionScript
框架在Johnson Space Center的Altair Lunar Lander项目中被用来开发Flex应用。Christopher
Dean是一位解决方案架构师,他创建了GEMVC,同时他还是Altair Lunar
Lander项目的可扩展信息模型(XIM)程序的首席科学家。InfoQ采访了Dean以深入了解GEMVC。
根据Dean所述,GEMVC是一套支持模型——视图——控制器(MVC)模式的ActionScript类。但它并不强制要求你使用其全部,你可
以选取你想用的那部分来用。它由一个模型及一个控制器框架构成,同时还有一个服务/网关层。视图就是Flex MXML文件本身。
当被问到为何没有使用现有的某个框架时,Dean说到:
在创建好自己的服务层后,我对Adobe
Labs的Cairngorm进行了调研。我真的不想改变它,因为我喜欢它的工作方式,这样我就决定围绕它来开发一个MVC框架。此外,我对
Cairngorm只有一个主控制器并且所有东西都需要通过单例来访问的方式不太满意,因为这样只允许存在唯一一个模型及控制器。我要对我的代码进行模块
化,这样就可以有单独的控制器来处理应用的不同部分了。理论上每个Flex组件都可以拥有自己的控制器。最后,这只是一个风格上的问题。
Dean解释了GEMVC与现有的一些框架如Cairngorm之间的一些主要差异:
GEMVC框架使用的是Flex的分发机制而不是自己的。我喜欢这样,因为我们可以用混合的方式来执行事件。在
Cairngorm中,所有的改变都必须通过模型实现。在大多数情况下这没什么问题。然而有时由于事件的发生,你想对应用进行控制,这甚至可能需要调用现
有组件的ActionScript方法。借助于GEMVC,你可以轻松完成这件事而无需知晓组件的路径所在。你只要知道处理该事件的组件的标识符即可。
Dean说到,除了上面提到的Altair Lunar Lander程序外,GEMVC还被用在Astromaterials
Research和Exploration Science
Directorate的Stardust项目中。该程序管理着星团探测器所返回的所有样品。
关于未来,Dean说到:
关于未来,在riaforge博客上已经有不少人提出了自己的观点,但我想说的是对于GEMVC来说,有三个东西马上就要到来了。
- 在服务层支持生产者,消费者功能。该功能已经完成了,其发布包随时都可以更新。
- 支持使用MXML标签在MXML文件中指定控制器来代替单独的ActionScript文件。这是一个风格上的问题,因为相对于ActionScript,有些人更喜欢用MXML。
- 分
等级控制器的改进。当前尚没有一种方法可以做到让某个组件控制器处理部分事件,然后再将其传播到更高层的控制器做进一步的处理。在XIM项目中已经提出了
对此的解决方案,虽然只是一些处理技巧,但确实做的很漂亮。我们也已经对让控制器自己来处理事件而不是由事件本身处理进行了讨论。
查看英文原文:GEMVC ActionScript Framework used in Altair Lunar Lander
转自:http://www.infoq.com/cn/news/2008/12/gemvc-framework-lunar-lander