SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

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

TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式Will Huang
 
Se2009 ch9
Se2009 ch9Se2009 ch9
Se2009 ch9浒 刘
 
软件工程 第九章
软件工程 第九章软件工程 第九章
软件工程 第九章浒 刘
 
無標記擴增實境實驗平台建置與追蹤技術驗證
無標記擴增實境實驗平台建置與追蹤技術驗證無標記擴增實境實驗平台建置與追蹤技術驗證
無標記擴增實境實驗平台建置與追蹤技術驗證Tehuan Chung
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
物件導向程式設計課程講義(98 ges hi版)
物件導向程式設計課程講義(98 ges hi版)物件導向程式設計課程講義(98 ges hi版)
物件導向程式設計課程講義(98 ges hi版)Hui-Shih Leng
 
软件工程
软件工程软件工程
软件工程bill0077
 
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社pingjiang
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海Shaoning Pan
 
OOAD with Applications - Chapter 2
OOAD with Applications - Chapter 2OOAD with Applications - Chapter 2
OOAD with Applications - Chapter 2Huan-Lin Tsai
 
Js高级技巧
Js高级技巧Js高级技巧
Js高级技巧fool2fish
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用yiditushe
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Liyao Chen
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)wangjiaz
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 

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

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

Mais de FLASH开发者交流会

Introduction to air for android 邱彦林
Introduction to air for android 邱彦林Introduction to air for android 邱彦林
Introduction to air for android 邱彦林FLASH开发者交流会
 
Swf文件格式和abc代码混淆工具 黄珏坤
Swf文件格式和abc代码混淆工具 黄珏坤Swf文件格式和abc代码混淆工具 黄珏坤
Swf文件格式和abc代码混淆工具 黄珏坤FLASH开发者交流会
 
松耦合代码之开发方法与工具演示 刘争辉
松耦合代码之开发方法与工具演示 刘争辉松耦合代码之开发方法与工具演示 刘争辉
松耦合代码之开发方法与工具演示 刘争辉FLASH开发者交流会
 
Flash media server 开发经验谈 沈先彬
Flash media server 开发经验谈 沈先彬Flash media server 开发经验谈 沈先彬
Flash media server 开发经验谈 沈先彬FLASH开发者交流会
 
Flash 独立游戏开发之路 徐黎明
Flash 独立游戏开发之路 徐黎明Flash 独立游戏开发之路 徐黎明
Flash 独立游戏开发之路 徐黎明FLASH开发者交流会
 
程序接口的另类理解与使用 孙毅
程序接口的另类理解与使用 孙毅程序接口的另类理解与使用 孙毅
程序接口的另类理解与使用 孙毅FLASH开发者交流会
 
9月18技术交流会大赛作品介绍 廖湘宁
9月18技术交流会大赛作品介绍 廖湘宁9月18技术交流会大赛作品介绍 廖湘宁
9月18技术交流会大赛作品介绍 廖湘宁FLASH开发者交流会
 
Flash mmorpg游戏引擎及工具开发概述-张明光
Flash mmorpg游戏引擎及工具开发概述-张明光Flash mmorpg游戏引擎及工具开发概述-张明光
Flash mmorpg游戏引擎及工具开发概述-张明光FLASH开发者交流会
 
Flash 游戏应用框架和模块化开发 邱广钦
Flash 游戏应用框架和模块化开发 邱广钦Flash 游戏应用框架和模块化开发 邱广钦
Flash 游戏应用框架和模块化开发 邱广钦FLASH开发者交流会
 
7月24日交流会麻球演讲 廖湘宁
7月24日交流会麻球演讲 廖湘宁7月24日交流会麻球演讲 廖湘宁
7月24日交流会麻球演讲 廖湘宁FLASH开发者交流会
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)FLASH开发者交流会
 
Ghost cat 以皮肤为主体的ui框架(唐翎)
Ghost cat 以皮肤为主体的ui框架(唐翎)Ghost cat 以皮肤为主体的ui框架(唐翎)
Ghost cat 以皮肤为主体的ui框架(唐翎)FLASH开发者交流会
 

Mais de FLASH开发者交流会 (20)

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

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