2010年5月30日,在第三届FLASH开发者交流会上的主题演讲,内容关于 ACTIONSCRIPT 中的元编程技巧,和开发流程解耦。
ACTIONSCRIPT中的元编程和开发流程解耦
主讲人:SGF – 谈熠
Actionscript中的元编程和开发流程解耦(谈熠)
View more presentations from FLASH开发者交流会.
2010年5月30日,在第三届FLASH开发者交流会上的主题演讲,内容关于 ACTIONSCRIPT 中的元编程技巧,和开发流程解耦。
ACTIONSCRIPT中的元编程和开发流程解耦
主讲人:SGF – 谈熠
Actionscript中的元编程和开发流程解耦(谈熠)
View more presentations from FLASH开发者交流会.
今天的ActionScript3看上去已经越来越象JAVA了,这是Adobe刻意营造出来局面,以促进AS快速普及。然而ActionScript在骨子里始终是一个不折不扣的prototype-based的脚本语言,因此AS脚本的本质上是Lambda。在许多环境下,巧妙地利用AS的动态特征,可以通过元编程来减少代码数量并提高实现的质量。这里我举几个例子:
PS: Ruby已经深深地格式化了我对编程语言的理解,因此在以下的实现中我直接参考了Ruby的对应实现。
1. Method missing实现
AS3 提供 flash.util.Porxy 来替代 AS中的Object.__resolve属性。通过继承Proxy类,并重载 callProperty方法,就可以在FLASH的运行时捕捉没有被实现的方法调用。在一些情况下,巧妙得利用这种机制可以大幅降低程序的实现代码量,提高程序的可维护性。比如在开发C/S结构的应用程序时,使用这个方法,可以让服务器端和客户端开发小组在工作上相互解耦,详细请见我在Adobe技术峰会上的发言。
下面就是一段应用在生成环境下的实现代码:
package
{
use namespace flash_proxy;
import flash.util.Porxy;
import mygame.Protocol;
import mygame.BuffWriter;
public dynamic class Server
extends Proxy
{
/**
* 为Server提供 method missing 捕捉机制,这样向server调用任意未实现的方法都会被编译成指令数据
* 发给服务器。
* @param name 调用的方法名,即通信协议名,采用驼峰格式,例如 server.runTo
* [...]
这是1月的FLASH开发者交流会上我的发言稿,主要讨论FLASH播放器的内存机制、对于这个机制的观察和理解,以及在此基础上如何进行优化。
会议现场的视频:
讲稿PPT: