SlideShare ist ein Scribd-Unternehmen logo
1 von 31
ACTIONSCRIPT中的元编程和开发流程解耦 谈熠 2010.5
元编程(Meta-programming) 一种根据在运行时的环境动态地获得、创建、修改程序所需要的类和对象的技巧。
一个简单AS元编程应用 Object.method1() Object.method2() Object.method3() Object[“method”+i]();
AS3中的元编程 ACTIONSCRIPT是一门基于Prototype的语言 flash.utils.* 提供了一套反射工具方法 两个AS3的元编程技巧: 反射 (Reflection) 方法缺失 (Method Missing)  两个编程概念 DRY Convention Over Configuration
反射 (Reflection) 工具: flash.utils.describeType 作用:返回一个对象的元数据的XML描述信息
反射的应用 classApplicationState {   publicstaticconstLOGIN:uint=1;   publicstaticconstLOADING:uint=2;   publicstaticconstPLAYING:uint=3; }
反射的应用 classApplicationState {   publicstaticconstLOGIN:uint=1;   publicstaticconstLOADING:uint=2;   publicstaticconstPLAYING:uint=3; }
反射的应用 classApplicationState {   publicstaticconstLOGIN:uint=1;   publicstaticconstLOADING:uint=2;   publicstaticconstPLAYING:uint=3;   privatestaticconststateNames:Object= {}; }
反射的应用 classApplicationState { ... publicstaticfunction init():void {   for each(varconstantName:XMLin describeType(ApplicationState).constant.@name)      { stateNames[ApplicationState[constantName.toString()]]= constantName.toString();      }   } } ...
反射的应用 classApplicationState {   ...   publicstaticfunctiongetStateNameByValue(val:uint):String   {     returnstateNames[val.toString()];   }  }
反射的应用 varcurrentState:uint=ApplicationState.LOADING; trace(currentState); // 1 trace( ApplicationState.getStateNameByValue(currentState) ); // "LOGIN"
概念1:干 干 —— 避免重复 DRY – Don’t Repeat Yourself 一种常见的重复操作: trace(“name:”+this.name+”, data:”+this.data);……
反射在调试时的应用 class Inspector /**  * 列出一个对象中的所有公开变量名,并把这些变量名放在一个 Vector.<String>   * 容器中  * @paramobj object of any kind  * @return 列出一个对象中的所有公开变量名,并把这些变量名放在一个   * Vector.<String> 容器中 */ publicstaticfunctionlistInstanceVariables(obj:*):Vector.<String> {   returnxmlListToStringList(describeType(obj).variable.@name); } publicstaticfunctiondumpInstanceVariables(obj:*):Vector.<String> {    returndumpProperty(listInstanceVariables(obj),obj); }
反射在调试时的应用 trace(Inspector. dumpInstanceVariables(this));
方法缺失 (Method Missing)  工具:flash.utils.Proxy 作用:重载AS对象默认的操作行为 原理: Object extends flash.utils.Proxy Object.methodName(arg0,arg1) Object.callProperty(“methodName”,args)
方法缺失 public dynamic class ClassA extends Proxy { flash_proxy override function callProperty(name:*, ...rest):*   {     trace(“请求调用方法:”+name)   } } varinstanceA:ClassA = new ClassA(); instanceA.doSomeThing(); // 请求调用方法:doSomeThing
概念2:习惯优于配置 习惯优于配置 Convention Over Configuration 惯例优于配置的宗旨是减轻配置文件的负担。我们要保留应用程序和程序框架的基本可扩展性,同时去掉无休止的配置信息。 AS的”方法缺失”技术非常适用于大配置量的情况。
元编程的使用建议 元编程的关键是你编写程序在它们运行的时候调整和修改它们自身。元编程被使用的越多,你的运行程序就越不象你所编写的源代码。这当然是这个模式的意义所在,不过同时也是危险所在 。调试普通代码已经不是件容易的事情,而要调试元编程所产生的短暂存在的对象则要更困难许多。 因此,一组完整的单元测试是使程序正常工作的关键。如果你的程序使用了大量的元编程技术,那么单元测试是绝对必不可少的。
对开发流程的思考
如何避免影响产品成功的因素 程序:不要出错 减少范错误的可能 降低范错误的频率 提高代码质量 精简代码实现
为了便于表达,我设置两个变量 代表:客户端组 client-side guys 代表:服务器组 server-side guys
常见的开发工作流程 … 一种紧密耦合的状态 tightly coupled 低效,易出错,难管理
解耦客户端的开发 吃过了吗? <hello>吃了吗</hello> 还没,您呢? {hello:“吃了吗”} …/hello/吃了吗 010011101001101
采用代理模式(Proxy Pattern) Server send() ServerProxy@connectionObject send() RealConnectionsend() RealConnection可能是 xml, json, bin socket, restful http … function send(){ connectionObject.send() }
用 flash.utils.Proxy优化代理实现 server.walkTo(x,y)   //  发出socket数据包 “WALKTO  X Y“ server.attach(targetId)  //  发出socket数据包 “ATTACK targetId“
优化后开发团队工作流程 系统整合 优点: ,[object Object]
工作效率提高,调试难度降低,[object Object]
QQ群。。。唉。。QQ群
谢谢! 谈熠 QQ: 2152525 开发者网站: www.wedoswf.com

Weitere ähnliche Inhalte

Mehr von Shanda innovation institute

[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)Shanda innovation institute
 
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)Shanda innovation institute
 
[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)
[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)
[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)Shanda innovation institute
 
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)Shanda innovation institute
 
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)Shanda innovation institute
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)Shanda innovation institute
 
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)Shanda innovation institute
 
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒Shanda innovation institute
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)Shanda innovation institute
 
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)Shanda innovation institute
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)Shanda innovation institute
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)Shanda innovation institute
 
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)Shanda innovation institute
 
[人本设计沙龙][2010.04.18]理性的设计(西乔)
[人本设计沙龙][2010.04.18]理性的设计(西乔)[人本设计沙龙][2010.04.18]理性的设计(西乔)
[人本设计沙龙][2010.04.18]理性的设计(西乔)Shanda innovation institute
 
[人本设计沙龙][2010.04.18]开放平台(谭思亮)
[人本设计沙龙][2010.04.18]开放平台(谭思亮)[人本设计沙龙][2010.04.18]开放平台(谭思亮)
[人本设计沙龙][2010.04.18]开放平台(谭思亮)Shanda innovation institute
 
[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)
[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)
[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)Shanda innovation institute
 

Mehr von Shanda innovation institute (16)

[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
 
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
 
[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)
[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)
[Flash开发者交流][2010.07.24]简化复杂的flash应用程序(谈熠)
 
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
[Flash开发者交流][2010.07.24]数着麻球开发自己喜欢的小游戏(廖湘宁)
 
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
 
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
Flash开发者交流][2010.05.30]flash 原型开发(刘磊)
 
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
[Flash开发者交流][2010.05.30]flash独立游戏 现状分析与发展思考(陈静)
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
 
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)[Flash开发者交流][2010.03.28]flash物理引擎(王成)
[Flash开发者交流][2010.03.28]flash物理引擎(王成)
 
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
[人本设计沙龙][2010.04.18]web产品在移动终端的应用和未来(ucd)
 
[人本设计沙龙][2010.04.18]理性的设计(西乔)
[人本设计沙龙][2010.04.18]理性的设计(西乔)[人本设计沙龙][2010.04.18]理性的设计(西乔)
[人本设计沙龙][2010.04.18]理性的设计(西乔)
 
[人本设计沙龙][2010.04.18]开放平台(谭思亮)
[人本设计沙龙][2010.04.18]开放平台(谭思亮)[人本设计沙龙][2010.04.18]开放平台(谭思亮)
[人本设计沙龙][2010.04.18]开放平台(谭思亮)
 
[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)
[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)
[人本设计沙龙][2010.04.18]第二届人本设计沙龙活动介绍(丁宇)
 

[Flash开发者交流][2010.05.30]actionscript中的元编程和开发流程解耦(谈熠)