actionscript-3 - Actionscript 3 的面向方面的编程库/框架?

标签 actionscript-3 frameworks aop

我正在为 Actionscript 3 寻找功能齐全的 AOP 库。

目前我注意到的以下项目,但它们似乎都有问题:

有人知道更好的解决方案吗?或者有人对 Actionscript 3 中的 AOP 有任何经验吗?

最好的问候,

汤姆

最佳答案

ActionScript 3 中的 AOP 真的很难。所有方法都有其问题:

  • 代理:实际上对程序员来说工作正常且透明,但对运行时却不是。如果任何函数签名需要 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 有 anonymous types 的概念.在运行时,这些只是 * (因此性能损失是可以预料的),但在编译时,它们是类型安全的。您可以做的是为您需要的任何类型的对象创建一个代理,并将其用作 AOP 容器。在您的整个代码中,您永远不会明确使用它的类型,而是使用等效的匿名类型。我描述的代理问题将消失。您唯一需要做的就是将您的代理不安全地转换为该匿名类型。

关于actionscript-3 - Actionscript 3 的面向方面的编程库/框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2817621/

相关文章:

java - 在 NetBeans 上 Play Framework 第一个项目无法正常工作

java - 网络浏览器中的录音小程序/Flash

actionscript-3 - 如何在 AS3 中显示随机创建的数字列表中的最高值

apache-flex - 从 Flex 3 安全访问 .NET Web 服务

c# - 详细了解 .NET 的工作原理

c# - 通过层次结构的 PostSharp 和方面继承

actionscript-3 - 如何在 AS3(Flash 或 AIR 运行时)中实现 XML-RPC 服务器?

ios - 库/框架之间的互操作性

java - 更改 Java 中被调用方法内使用的对象的属性

aop - Spring AOP : How exclude an unnecessary @Pointcut (@Around advice) execution due the execution from others @Pointcuts/advices