类型/泛型方面值得付出努力



我对类型/泛型方面做了一些研究。关于方面的一个重要事实是遗忘。因此,方面的关注点应该与领域关注点正交。尽管如此,还是有一些研究使AspectJ类型安全(StrongAspectJ)/使用泛型引入每种类型方面。一篇论文提到了蝇量级模式的实现作为一个方面。现在我想知道通用方面是否还有更多用例?

PostSharp是弱类型,即建议将参数和返回值视为"对象"。PostSharp 中有一些对泛型方面的支持(方面可以是泛型类),但它不是很有用,因为建议是弱类型的。

请注意,在封面后面,PostSharp 生成的胶水代码是强类型的。但是,当暴露给方面代码时,所有内容都会向下投射到对象。

我正在考虑在下一个版本的 PostSharp 中实现强类型建议,可以在支持泛型参数的情况下实现。原因是运行时性能,因为将值类型装箱到对象中会带来相当大的性能开销。请注意,泛型在 .NET 中的实现方式与在 Java 中的实现方式不同,因此可能需要在两个平台上以不同的方式讨论这一点。

如果您需要任何论文帮助,请随时亲自与我联系。

自动生成一些样板以使类可通过 RMI 调用是另一个用例。该示例为一堆方法实现了一些围绕建议。

pointcut callsToServer(Type T):
    call(public T Server.*(..)) && this(Client)
T around(Type T): callsToServer(T) {
    T obj = null;
    try {
        obj = proceed();
    } catch (java.rmi.RemoteException ex) {}
    return obj;
}

泛型允许您说"我们将返回与方法签名所说的相同类型的对象"。当然,如果我们只返回对象,这是正确的。我们也许可以通过"抛出后"建议做类似的事情,但我们无法操纵返回值将 RemoteException 转换为空返回值。

最新更新