Your SlideShare is downloading. ×
0
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
简化复杂的Flash应用程序 谈熠
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

简化复杂的Flash应用程序 谈熠

1,242

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,242
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
29
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. 化繁为简简化复杂的FLASH应用程序<br />谈熠<br />2010.5 <br />
  2. 简化开发,提高程序质量<br />简化开发<br />减少范错误的可能<br />降低范错误的频率<br />提高代码质量<br />精简代码实现<br />
  3. 程序设计方面的应用<br />
  4. 数据模型 和 E4X<br />E4X:一个类似Xpath,针对XML数据检索方法<br />语法简单,速度快<br />适用的情况:<br />XMLSOCKET<br />XML为基础的HTTP服务或者文件服务<br />思路:XML、XMLLIST直接作为数据模型(Models)<br />
  5. varthePeople:XML =<people> <person name="Mims Wright" suffix="III"> <age>27</age> <aka>Mims H Wright</aka> <aka>TehAWesoeomes!</aka> <bio><!--[CDATA[This guy <b>rulz<b>!]]--></bio> </person> <person name="Roger Braunstein">      <age>26</age> <aka>Rog</aka> <aka>That guy</aka> <bio><!--[CDATA[Likes food.]]--></bio> </person> </people>;<br />
  6. E4X的用例<br />thePeople.person.age<br />// 得到:<age>27</age> <age>26</age><br />thePeople.person.@name<br />// 得到:XMLList: Mims Wright, Roger Braunstein<br />thePeople.person.(age >= 21)<br />// 得到:<br /><person name="Mims Wright" suffix="III"> <age>27</age> <aka>Mims H Wright</aka> <aka>TehAWesoeomes!</aka> <bio><!--[CDATA[This guy <b>rulz<b>!]]--></bio> </person><br />
  7. 采用XML直接作为Model的思路<br />一种常见的情况<br />建议的方式<br />继承xMLList容器<br />通过 getter 和 setter 来提供需要进行逻辑处理的数据访问<br />
  8. 元编程(Meta-programming)<br />一种根据在运行时的环境动态地获得、创建、修改程序所需要的类和对象的技巧。<br />
  9. 一个简单AS元编程应用<br />Object.method1()<br />Object.method2()<br />Object.method3()<br />Object[“method”+i]();<br />
  10. AS3中的元编程<br />ACTIONSCRIPT是一门基于Prototype的语言<br />flash.utils.* 提供了一套反射工具方法<br />两个AS3的元编程技巧:<br />反射 (Reflection)<br />方法缺失 (Method Missing) <br />两个编程概念<br />DRY<br />Convention Over Configuration<br />
  11. 反射 (Reflection)<br />工具: flash.utils.describeType<br />作用:返回一个对象的元数据的XML描述信息<br />
  12. 反射的应用<br />classApplicationState<br />{<br /> publicstaticconstLOGIN:uint=1;<br /> publicstaticconstLOADING:uint=2;<br /> publicstaticconstPLAYING:uint=3;<br />}<br />
  13. 反射的应用<br />classApplicationState<br />{<br /> publicstaticconstLOGIN:uint=1;<br /> publicstaticconstLOADING:uint=2;<br /> publicstaticconstPLAYING:uint=3;<br />}<br />
  14. 反射的应用<br />classApplicationState<br />{<br /> publicstaticconstLOGIN:uint=1;<br /> publicstaticconstLOADING:uint=2;<br /> publicstaticconstPLAYING:uint=3;<br /> privatestaticconststateNames:Object= {};<br />}<br />
  15. 反射的应用<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 />
  16. 反射的应用<br />classApplicationState<br />{<br /> ...<br /> publicstaticfunctiongetStateNameByValue(val:uint):String<br /> {<br /> returnstateNames[val.toString()];<br /> }<br /> }<br />
  17. 反射的应用<br />varcurrentState:uint=ApplicationState.LOADING;<br />trace(currentState); // 1<br />trace(<br />ApplicationState.getStateNameByValue(currentState)<br />); // "LOGIN"<br />
  18. 概念1:干<br />干 —— 避免重复<br />DRY – Don’t Repeat Yourself<br />一种常见的重复操作:<br />trace(“name:”+this.name+”, data:”+this.data);……<br />
  19. 反射在调试时的应用<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 />
  20. 反射在调试时的应用<br />trace(Inspector. dumpInstanceVariables(this));<br />
  21. 方法缺失 (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 />
  22. 方法缺失<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 />
  23. 概念2:习惯优于配置<br />习惯优于配置<br />Convention Over Configuration<br />惯例优于配置的宗旨是减轻配置文件的负担。我们要保留应用程序和程序框架的基本可扩展性,同时去掉无休止的配置信息。<br />AS的”方法缺失”技术非常适用于大配置量的情况。<br />
  24. 元编程的使用建议<br />元编程的关键是你编写程序在它们运行的时候调整和修改它们自身。元编程被使用的越多,你的运行程序就越不象你所编写的源代码。这当然是这个模式的意义所在,不过同时也是危险所在。<br />调试普通代码已经不是件容易的事情,而要调试元编程所产生的短暂存在的对象则要更困难许多。<br />因此,一组完整的单元测试是使程序正常工作的关键。如果你的程序使用了大量的元编程技术,那么单元测试是绝对必不可少的。<br />
  25. 对开发流程的思考<br />
  26. 为了便于表达,我设置两个变量<br />代表:客户端组<br />client-side guys<br />代表:服务器组<br />server-side guys<br />
  27. 常见的开发工作流程<br />…<br />一种紧密耦合的状态<br />tightly coupled<br />低效,易出错,难管理<br />
  28. 解耦客户端的开发<br />吃过了吗?<br /><hello>吃了吗</hello><br />还没,您呢?<br />{hello:“吃了吗”}<br />…/hello/吃了吗<br />010011101001101<br />
  29. 采用代理模式(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 />
  30. 用 flash.utils.Proxy优化代理实现<br />server.walkTo(x,y) // 发出socket数据包 “WALKTO X Y“<br />server.attach(targetId) // 发出socket数据包 “ATTACK targetId“<br />
  31. 优化后开发团队工作流程<br />系统整合<br />优点:<br /><ul><li>降低团队之间的依赖
  32. 工作效率提高,调试难度降低</li></li></ul><li>更有效的技术交流<br />
  33. QQ群。。。唉。。QQ群<br />
  34. 谢谢,谈熠<br />

×