【问题标题】:Is there a simple means of adding an aspect to an existing VB.NET method?是否有一种简单的方法可以向现有的 VB.NET 方法添加方面?
【发布时间】:2012-07-08 21:13:18
【问题描述】:

我知道 VB.NET 有许多面向方面的框架。为了向几个方法添加一个方面,将整个框架投入使用有点繁重。 VB.NET 是否提供了一种简单的方法(通过某种元编程/反射)在类/对象中的现有方法之上分层方面?

基本上,目标是拦截方法的传入消息以调用它并添加副作用或操纵请求,就像在标准 AOP 中通常所做的那样。

是否有计划将方面直接集成到语言中?

【问题讨论】:

    标签: vb.net decorator aop


    【解决方案1】:

    在这种情况下多态不是一种选择吗?我想您会发现,在某种 AOP 框架之外,VB 无法更改现有类的功能。您可以继承和覆盖基成员,也可以使用扩展方法向现有类添加额外功能,但无法更改现有类中的现有功能。

    可以创建一个模仿另一个现有库的新库,并诱使现有代码认为您的新库是原始库,但除非绝对必要,否则这是一个坏主意。您可能只需要以标准的 OOP 方式重新思考您的设计,而不是用 AOP 术语思考。

    【讨论】:

    • 谢谢。我只是有时会发现自己正在寻找在 VB.NET 中可以用更动态的语言(如 Ruby)轻松完成的方法。
    【解决方案2】:

    装饰器(或代理)模式怎么样?由于它只有几个方法,那么你只需要一两个装饰器类。如果后来发现不只是一两种方法,那么可以考虑引入 AOP 工具。

    这是一个example in C#,应该很容易转换为 VB.NET

    【讨论】:

    • 我在我们商店的代码库中的一些地方使用了装饰器模式,它非常方便。当数百行代码引用一种类型时,麻烦就来了,你不敢重写每个引用来使用装饰器类型。你想悄悄地添加一个装饰,这样当前的代码就不会抱怨(甚至意识到它发生了)。
    猜你喜欢
    • 2011-03-08
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    相关资源
    最近更新 更多