SlideShare a Scribd company logo
ACTIONSCRIPT中的元编程和开发流程解耦谈熠2010.5
元编程(Meta-programming)一种根据在运行时的环境动态地获得、创建、修改程序所需要的类和对象的技巧。
一个简单AS元编程应用Object.method1()Object.method2()Object.method3()Object[“method”+i]();
AS3中的元编程ACTIONSCRIPT是一门基于Prototype的语言flash.utils.* 提供了一套反射工具方法两个AS3的元编程技巧:反射 (Reflection)方法缺失 (Method Missing) 两个编程概念DRYConvention 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:XMLindescribeType(ApplicationState).constant.@name)     {stateNames[ApplicationState[constantName.toString()]]=constantName.toString();     }  }}...
反射的应用classApplicationState{  ...  publicstaticfunctiongetStateNameByValue(val:uint):String  {    returnstateNames[val.toString()];  } }
反射的应用varcurrentState:uint=ApplicationState.LOADING;trace(currentState); // 1trace(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.ProxyObject.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)Serversend()ServerProxy@connectionObjectsend()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“
优化后开发团队工作流程系统整合优点:降低团队之间的依赖
工作效率提高,调试难度降低更有效的技术交流
QQ群。。。唉。。QQ群
Actionscript中的元编程和开发流程解耦(谈熠)
Actionscript中的元编程和开发流程解耦(谈熠)
谢谢!谈熠QQ: 2152525开发者网站: www.wedoswf.com

More Related Content

PPTX
0320 iOS 入門到實作 客製化地圖
PPT
Flash ria usability 刘轩飞
PPT
Flash基于对象的优化技术 黄炎中
PPT
软件工程 第十一章
PPT
PPTX
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
PPT
Abap oo
PPTX
Dev307
0320 iOS 入門到實作 客製化地圖
Flash ria usability 刘轩飞
Flash基于对象的优化技术 黄炎中
软件工程 第十一章
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Abap oo
Dev307

Similar to Actionscript中的元编程和开发流程解耦(谈熠) (20)

PPTX
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
PPT
软件工程 第九章
PPT
Se2009 ch9
PPT
無標記擴增實境實驗平台建置與追蹤技術驗證
PPT
Java Script 引擎技术
DOC
物件導向程式設計課程講義(98 ges hi版)
PPT
软件工程
PPTX
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
PPT
信息系统开发平台OpenExpressApp
PPTX
Les 3 ppt
PPT
Android应用开发 - 沈大海
PPT
软件工程2010
PPT
OOAD with Applications - Chapter 2
PPT
Js培训
PPTX
Js高级技巧
PPT
通过Struts构建Web应用
PDF
Windows 8 apps dev.整理及分享
PPT
Struts Mitac(1)
PDF
Unity遊戲設計- 應用Sprite物件
PPTX
Ecma script edition5-小试
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
软件工程 第九章
Se2009 ch9
無標記擴增實境實驗平台建置與追蹤技術驗證
Java Script 引擎技术
物件導向程式設計課程講義(98 ges hi版)
软件工程
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
信息系统开发平台OpenExpressApp
Les 3 ppt
Android应用开发 - 沈大海
软件工程2010
OOAD with Applications - Chapter 2
Js培训
Js高级技巧
通过Struts构建Web应用
Windows 8 apps dev.整理及分享
Struts Mitac(1)
Unity遊戲設計- 應用Sprite物件
Ecma script edition5-小试
Ad

More from FLASH开发者交流会 (20)

PPTX
Bambook sdk 与action script
PPTX
Bambook开放之路
PPT
Introduction to air for android 邱彦林
PPTX
Misato engine hugh_tsai-蔡浩宇
PPTX
Swf文件格式和abc代码混淆工具 黄珏坤
PPT
松耦合代码之开发方法与工具演示 刘争辉
PPT
Flash media server 开发经验谈 沈先彬
PPTX
Flash 独立游戏开发之路 徐黎明
PPTX
程序接口的另类理解与使用 孙毅
PPTX
Flash游戏大会 商文烨
PPTX
9月18技术交流会大赛作品介绍 廖湘宁
PPTX
简化复杂的Flash应用程序 谈熠
PPTX
Flash mmorpg游戏引擎及工具开发概述-张明光
PPT
Web base 吴志华
PPTX
Flash 游戏应用框架和模块化开发 邱广钦
PPTX
7月24日交流会麻球演讲 廖湘宁
PPT
浅析Flash特效开发 陈勇
PPT
Flash网络通讯处理 陈苏俊
PPT
轻量级Flash服务器开发框架(刘恒)
PPT
Ghost cat 以皮肤为主体的ui框架(唐翎)
Bambook sdk 与action script
Bambook开放之路
Introduction to air for android 邱彦林
Misato engine hugh_tsai-蔡浩宇
Swf文件格式和abc代码混淆工具 黄珏坤
松耦合代码之开发方法与工具演示 刘争辉
Flash media server 开发经验谈 沈先彬
Flash 独立游戏开发之路 徐黎明
程序接口的另类理解与使用 孙毅
Flash游戏大会 商文烨
9月18技术交流会大赛作品介绍 廖湘宁
简化复杂的Flash应用程序 谈熠
Flash mmorpg游戏引擎及工具开发概述-张明光
Web base 吴志华
Flash 游戏应用框架和模块化开发 邱广钦
7月24日交流会麻球演讲 廖湘宁
浅析Flash特效开发 陈勇
Flash网络通讯处理 陈苏俊
轻量级Flash服务器开发框架(刘恒)
Ghost cat 以皮肤为主体的ui框架(唐翎)
Ad

Actionscript中的元编程和开发流程解耦(谈熠)