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