GEMVC ActionScript框架在Johnson Space Center
![](/icons/54108de.gif)
Altair Lunar Lander项目中被用来开发Flex应用
![](/icons/54108dou2.gif)
Christopher Dean是
![](/icons/54108yi.gif)
位解决方案架构师
![](/icons/54108dou.gif)
他创建了GEMVC
![](/icons/54108dou.gif)
同时他还是Altair Lunar Lander项目
![](/icons/54108de.gif)
可扩展信息模型(XIM)
![](/icons/54108chengxu.gif)
![](/icons/54108de.gif)
首席科学家
![](/icons/54108dou2.gif)
InfoQ采访了Dean以深入了解GEMVC
![](/icons/54108dou2.gif)
根据Dean所述
![](/icons/54108dou.gif)
GEMVC是
![](/icons/54108yi.gif)
套支持模型——视图——控制器(MVC)模式
![](/icons/54108de.gif)
ActionScript类
![](/icons/54108dou2.gif)
但它并不强制要求你使用其全部
![](/icons/54108dou.gif)
你可以选取你想用
![](/icons/54108de.gif)
那部分来用
![](/icons/54108dou2.gif)
它由
![](/icons/54108yi.gif)
个模型及
![](/icons/54108yi.gif)
个控制器框架构成
![](/icons/54108dou.gif)
同时还有
![](/icons/54108yi.gif)
个服务/网关层
![](/icons/54108dou2.gif)
视图就是Flex MXML文件本身
![](/icons/54108dou2.gif)
当被问到为何没有使用现有
![](/icons/54108de.gif)
某个框架时
![](/icons/54108dou.gif)
Dean说到:
在创建好自己
![](/icons/54108de.gif)
服务层后
![](/icons/54108dou.gif)
我对Adobe Labs
![](/icons/54108de.gif)
Cairngorm进行了调研
![](/icons/54108dou2.gif)
我真
![](/icons/54108de.gif)
不想改变它
![](/icons/54108dou.gif)
![](/icons/54108yinwei.gif)
我喜欢它
![](/icons/54108de.gif)
工作方式
![](/icons/54108dou.gif)
这样我就决定围绕它来开发
![](/icons/54108yi.gif)
个MVC框架
![](/icons/54108dou2.gif)
此外
![](/icons/54108dou.gif)
我对Cairngorm只有
![](/icons/54108yi.gif)
个主控制器并且所有东西都需要通过单例来访问
![](/icons/54108de.gif)
方式不太满意
![](/icons/54108dou.gif)
![](/icons/54108yinwei.gif)
这样只允许存在唯
![](/icons/54108yi.gif)
![](/icons/54108yi.gif)
个模型及控制器
![](/icons/54108dou2.gif)
我要对我
![](/icons/54108de.gif)
代码进行模块化
![](/icons/54108dou.gif)
这样就可以有单独
![](/icons/54108de.gif)
控制器来处理应用
![](/icons/54108de.gif)
区别部分了
![](/icons/54108dou2.gif)
理论上每个Flex组件都可以拥有自己
![](/icons/54108de.gif)
控制器
![](/icons/54108dou2.gif)
最后
![](/icons/54108dou.gif)
这只是
![](/icons/54108yi.gif)
个风格上
![](/icons/54108de.gif)
问题
![](/icons/54108dou2.gif)
Dean解释了GEMVC和现有
![](/icons/54108de.gif)
![](/icons/54108yi.gif)
些框架如Cairngorm的间
![](/icons/54108de.gif)
![](/icons/54108yi.gif)
些主要差异:
GEMVC框架使用
![](/icons/54108de.gif)
是Flex
![](/icons/54108de.gif)
分发机制而不是自己
![](/icons/54108de.gif)
![](/icons/54108dou2.gif)
我喜欢这样
![](/icons/54108dou.gif)
![](/icons/54108yinwei.gif)
我们可以用混合
![](/icons/54108de.gif)
方式来执行事件
![](/icons/54108dou2.gif)
在Cairngorm中
![](/icons/54108dou.gif)
所有
![](/icons/54108de.gif)
改变都必须通过模型实现
![](/icons/54108dou2.gif)
在大多数情况下这没什么问题
![](/icons/54108dou2.gif)
然而有时由于事件
![](/icons/54108de.gif)
发生
![](/icons/54108dou.gif)
你想对应用进行控制
![](/icons/54108dou.gif)
这甚至可能需要
![](/icons/54108diaoyong.gif)
现有组件
![](/icons/54108de.gif)
ActionScript思路方法
![](/icons/54108dou2.gif)
借助于GEMVC
![](/icons/54108dou.gif)
你可以轻松完成这件事而无需知晓组件
![](/icons/54108de.gif)
路径所在
![](/icons/54108dou2.gif)
你只要知道处理该事件
![](/icons/54108de.gif)
组件
![](/icons/54108de.gif)
标识符即可
![](/icons/54108dou2.gif)
Dean说到
![](/icons/54108dou.gif)
除了上面提到
![](/icons/54108de.gif)
Altair Lunar Lander
![](/icons/54108chengxu.gif)
外
![](/icons/54108dou.gif)
GEMVC还被用在Astromaterials Research和Exploration Science Directorate
![](/icons/54108de.gif)
Stardust项目中
![](/icons/54108dou2.gif)
该
![](/icons/54108chengxu.gif)
管理着星团探测器所返回
![](/icons/54108de.gif)
所有样品
![](/icons/54108dou2.gif)
有关未来
![](/icons/54108dou.gif)
Dean说到:
有关未来
![](/icons/54108dou.gif)
在riaforge博客上已经有不少人提出了自己
![](/icons/54108de.gif)
观点
![](/icons/54108dou.gif)
但我想说
![](/icons/54108de.gif)
是对于GEMVC来说
![](/icons/54108dou.gif)
有 3个东西马上就要到来了
![](/icons/54108dou2.gif)
在服务层支持生产者
![](/icons/54108dou.gif)
消费者功能
![](/icons/54108dou2.gif)
该功能已经完成了
![](/icons/54108dou.gif)
其发布包随时都可以更新
![](/icons/54108dou2.gif)
支持使用MXML标签在MXML文件中指定控制器来代替单独
![](/icons/54108de.gif)
ActionScript文件
![](/icons/54108dou2.gif)
这是
![](/icons/54108yi.gif)
个风格上
![](/icons/54108de.gif)
问题
![](/icons/54108dou.gif)
![](/icons/54108yinwei.gif)
相对于ActionScript
![](/icons/54108dou.gif)
有些人更喜欢用MXML
![](/icons/54108dou2.gif)
分等级控制器
![](/icons/54108de.gif)
改进
![](/icons/54108dou2.gif)
当前尚没有
![](/icons/54108yi.gif)
种思路方法可以做到让某个组件控制器处理部分事件
![](/icons/54108dou.gif)
然后再将其传播到更高层
![](/icons/54108de.gif)
控制器做进
![](/icons/54108yi.gif)
步
![](/icons/54108de.gif)
处理
![](/icons/54108dou2.gif)
在XIM项目中已经提出了对此
![](/icons/54108de.gif)
解决方案
![](/icons/54108dou.gif)
虽然只是
![](/icons/54108yi.gif)
些处理窍门技巧
![](/icons/54108dou.gif)
但确实做
![](/icons/54108de.gif)
很漂亮
![](/icons/54108dou2.gif)
我们也已经对让控制器自己来处理事件而不是由事件本身处理进行了讨论