gpt4 book ai didi

aop - aop中什么是散射和缠结

转载 作者:行者123 更新时间:2023-12-02 15:20:02 25 4
gpt4 key购买 nike

我试图理解 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");
}
}

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

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

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

确定什么可能是一个方面:

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

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

关于aop - aop中什么是散射和缠结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com