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

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

2,049

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,049
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
66
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×