当前位置:  开发笔记 > 编程语言 > 正文

ActionScript 3的面向方面编程库/框架?

如何解决《ActionScript3的面向方面编程库/框架?》经验,为你挑选了1个好方法。

我正在为Actionscript 3寻找一个功能齐全的AOP库.

到目前为止我注意到的以下项目,但他们似乎都遇到了问题:

http://farmcode.org/page/Sodality.aspx
到目前为止看起来最有希望,但是它要求你为我认为的每个AOP"调用"创建一个全新的类,它会迫使你遵循很多限制,有人有经验吗?

http://code.google.com/p/loom-as3/
这个已停止使用

http://code.google.com/p/floxy/
动态代理生成?据我所知,这不是真正的AOP,对吧?

http://code.google.com/p/flemit/
动态字节码生成?这是我认为AOP需要的东西,但不是我正在寻找的全功能AOP框架

有谁知道更好的解决方案?或者有没有人在Actionscript 3中有过AOP的经验?

最好的祝福,

汤姆



1> back2dos..:

ActionScript 3中的AOP非常难.所有的aproaches都有他们的问题:

代理:实际上对程序员来说工作得很好而且透明,但对运行时却没有.如果任何函数签名需要类型A的对象,那么类型A的对象的代理将无法通过类型检查

字节码生成:嗯,有点工作,但不太好.在AVM2中加载字节码是异步的,所以你不能及时做到这一点.此外,一旦加载了字节码,就无法丢弃它,因此您无法再次修改类.

其他任何事情都很冗长

你能做的就是使用Haxe.Haxe不仅具有优于AS3的其他优势,而且还允许一些AOP.有两种方法:

动态方法

在Haxe中,您可以声明方法是动态的.这些可以在运行时替换以提供建议.让我解释一下,幕后发生了什么.以下Haxe代码:

public function foo(param1:Type1):Type2 { /*body*/ }
public dynamic function bar(param1:Type1):Type2 { /*body*/ }

是否等效于以下AS3代码:

public function foo(param1:Type1):Type2 { /*body*/ }
public var bar:Function = function (param1:Type1):Type2 { /*body*/ }

使用后者总是比前者表现更差,因为涉及很多运行时类型检查.然而,在Haxe中,与AS3不同,您不会失去严格键入的编译时间优势.

同样地,使用Haxe的访问器(确实与AS3非常不同),您还可以使用AOP作为属性:

public var foo(get_foo, set_foo):Type;
dynamic function get_foo() {//Haxe will automatically infer types: http://haxe.org/ref/type_infer
    return this.foo;
}
dynamic function set_foo(param) {
    return this.foo = param;
}

任何动态方法都可以在运行时替换为您想做的任何事情.AS2允许这样,像as2lib这样的库提供了AOP.不幸的是,它已不再可用.但我想你可以自己弄清楚剩下的.

代理

Haxe有匿名类型的概念.在运行时,这些仅仅是*(因此预期会出现性能损失),但在编译时,它们是类型安全的.你可以做的是为你需要的任何类型的对象创建一个代理,并将其用作AOP容器.在你的整个代码中,你永远不会使用它的类型,而是一个等效的匿名类型.我所描述的代理问题将会消失.您唯一需要做的就是将代理的不安全转换为匿名类型.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有