代码之家  ›  专栏  ›  技术社区  ›  Jaswant Agarwal

面向方面编程?

  •  2
  • Jaswant Agarwal  · 技术社区  · 15 年前

    如何使用c_中的aop将属性应用于类函数?

    更新:我有点不清楚应该在什么上下文中使用AOP?由于我们可以将AOP用于日志记录、安全性(身份验证),请建议一些其他场景,以便我们利用AOP

    AOP是否可以用于在应用程序进程中的不同运行线程之间共享数据?

    2 回复  |  直到 11 年前
        1
  •  4
  •   Noon Silk    15 年前

    C对AOP没有很好的支持。

    有一个框架, PostSharp ,你可能会喜欢看看。它可能会让你得到你想要的,但它永远不会像Java那样好。

    --编辑

    如果您不希望使用Postharp这样的框架,请查看ContextBoundObject类,以及(IIRC)dynamicProxy。但这两种方法都需要更改继承链,或者更改实例化对象的方式。

        2
  •  5
  •   Alfamale    14 年前

    AOP旨在涵盖它所指的横切关注点,即系统中许多对象所需的功能,但它不是这些对象关注点的核心。如果通过将横切关注点编码为整个系统中的对象来满足这些需求,那么最终我们会遇到一个混乱的、难以维护的跨多个对象的实现分离。

    横切关注的典型例子是日志记录:日志记录对于真实的、活动的系统是必不可少的,需要在整个系统中实现,但实际上不是该系统中对象的关注点:日志记录 系统 可能需要增值税计算对象来实现日志记录,但日志记录实际上不是增值税计算对象本身的问题。AOP允许我们将这些系统范围(横切)需求分别指定给我们的主业务逻辑,然后在运行时或编译时将它们编织在一起。

    AOP通过截获对对象方法的调用来工作。拦截点称为切入点,拦截方法称为建议方法,拦截方法上的代码称为建议。我只熟悉Spring.net的AOP框架,它允许您通过配置文件和编程方式指定和应用切入点和通知。NET AOP有四种类型的通知:before、after、around和throw,这四种类型的通知是在拦截一个advised方法时调用的。 之前 调用advised方法, 之后 它在调用之前和之后以及分别引发异常时被调用。无论是通过配置应用还是通过编程应用, 细想过的 该方法不了解Spring.NET AOP,甚至不知道它已被建议使用。

    AOP有用的另一个例子是事务。如果我们尝试在对象内的代码中实现这一点,我们最终得到的对象必须意识到它们是在一个事务中工作的,在我看来,这不是一个理想的设计特性。AOP允许我们在外部创建和协调参与事务的对象的事务,这可以提供更稳定、维护友好的设计。

    Spring.NET文档非常擅长解释AOP的一般情况,尤其是Spring.NET对AOP的实现,并包含许多示例。即使您没有考虑使用Spring.NETAOP框架,也值得一看。