面向方面的编程究竟是什么?

时间:2011-10-04 04:46:55

标签: aop

  

可能重复:
  What is aspect-oriented programming?

我一直在阅读面向方面的编程。我找不到任何可以用外行人的术语解释AOP概念的资源。特别是,我很难理解“建议”是什么以及织布者究竟做了什么。如果有人能在AOP上解释或拥有良好的资源,那就太棒了。

2 个答案:

答案 0 :(得分:2)

任何入门教程都应该没问题;您对这些条款的具体了解是什么?

如果原始代码包含方面,“weaver”会处理修改。例如,在Java中,在编译或加载时操作字节代码以注入修改原始流的代码。 “建议”是注入的代码。

(粗略地)

答案 1 :(得分:1)

面向方面编程在您遇到“横切关注”时使用,这会影响整个程序,并且不能整齐地装入普通类。

AOP的典型示例是日志记录。您的整个应用程序都需要记录,但是每次要在类中记录某些内容时,您都不希望新建记录器对象,因为这会将您的类紧密地绑定到记录器对象,并在整个应用程序中分散日志记录代码。

相反,你想要做的是拥有一个logger类(可能是一个静态类,所以你不必实例化它),然后有一些方法从任何地方调用该类。您希望保持松散耦合,以便您可以根据需要将记录器类替换为另一个。

通过AOP调用课程有很多种方法。在C#中,一种方法是使用Attributes:

[MyLogger()]
CallingThisMethodCallsTheLogger(int someParameter)
{
    // Do something with someParameter that has nothing to do with the logger
}

通过AOP调用类方法的另一种方法是检测它们。这可以通过执行类方法的二进制重写来完成,这样它们首先调用AOP方法,然后以通常的方式调用常用方法。例如,可以完成仪表类测量它们的性能。

  

面向方面编程中使用的标准术语可能包括:

     
      
  • 横切关注点:尽管OO模型中的大多数类都是如此   将执行单一,特定的功能,他们经常共享,   其他课程的二级要求。

  •   
  • 建议:这是您要应用的附加代码   你现有的模特。在我们的示例中,这是日志代码   我们想在线程进入或退出方法时应用。

  •   
  • 切入点:这是给定执行点的术语   需要应用跨领域关注的申请。   在我们的示例中,当线程进入时,到达切入点   方法,并在线程退出时达到另一个切入点   方法

  •   
  • 看点:切入点和建议的组合是   称为方面。在上面的示例中,我们添加了一个日志记录方面   我们的应用程序通过定义切入点并给出正确的   建议。

  •   

http://en.wikipedia.org/wiki/Aspect-oriented_programming