aop中的scattering和tangling是什么

What are scattering and tangling in aop

我正在尝试了解 AOP 中使用的关注点分离。因此,如果有人可以使用一些基本的 HelloWorld 示例向我解释 AOP 中的代码分散和代码缠结是什么意思,我将不胜感激。事后我怎么知道给定的问题不是系统核心问题而是一个方面?非常感谢。

恐怕我会以日志为例,这是我们经常使用的,但我希望它能让人容易理解。考虑这个带有日志记录的 helloworld 程序:

public class HelloWorld {

  private static Logger logger = Logger.getLogger(HelloWorld.class);

  public static void main(String []argv) {
    logger.entering("HelloWorld","main");
    System.out.println("Hello World");
    logger.exiting("HelloWorld","main");
  }
}

我的 class 只有 8 行(忽略空格)- 其中 3 行在记录,几乎一半!日志记录与此 class 的主要目标无关,即打印 Hello World。日志记录 与此 class 的主要目标纠缠不清 。如果我们可以删除它并以另一种方式表达它,那么我们的代码就会减少一半,并且 class 主要试图实现的目标会更加清晰。此外,纠结在一起可能会损害重用等功能 - 如果不进行一些日志记录并且需要某种日志记录基础结构,此代码不能用于打印 helloworld。

现在考虑一个真实的系统,其中有多个 classes,它们都在进行日志记录。现在假设我决定更改我正在使用的一种日志记录方法 - 我希望我对 entering 的所有调用都更改为 info 并包含一些额外信息。恶梦!我的日志记录 分散 在我的代码库中。没有一处可以进行此更改,可能有数千处。

如果我在一个方面捕获了分散的、横切的关注点,那么只有一个地方可以进行更改。

确定可能是什么方面:

  • 考虑您的 classes 的主要功能 - 它们的基本构建目的是什么。那里是否有其他代码与此不严格相关,但您发现您需要这样做(例如开始并提交事务,使用某些安全服务进行身份验证)。
  • 您是否发现自己一遍又一遍地做着非常相似的事情 - 跨越多个 classes 或者甚至只是在一个 class.
  • 中的多个方法

散射可能是一个小规模的问题。也许您的 classes 中的每个方法都在重复某种模式,但没有其他 classes 正在使用它。为 class 创建一个小方面没有什么坏处,它只是解决了这些方法中的分散问题。