我想了解AOP中使用的问题的分离。因此,如果有人能够解释我使用一些基本的HelloWorld示例代码散布和代码在AOP中缠绕是什么,我将不胜感激。事后我会怎么知道一个给定的问题不是系统核心问题,而是一个方面?非常感谢。什么是aop中的散射和缠结
1
A
回答
4
恐怕我会用日志记录作为例子,这是我们经常使用的一个例子,但我希望它能够让我们很容易理解。考虑这个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
并包含一些额外的信息。恶梦!我的日志记录是分散在我的代码库中的。没有一个地方可以做出这种改变,可能会有成千上万。
如果我在一个方面捕捉到分散的横切关注点,那么只会有一个地方进行更改。
确定什么可能是一个方面:
- 考虑你的类的主要功能 - 什么是他们从根本上正在修建的。是否有其他代码并不严格与此相关,但您发现您需要这样做(例如开始并提交事务,使用某个安全服务进行身份验证)。
- 你是否发现自己做了一遍又一遍的非常类似的事情 - 无论是跨多个班级,还是仅仅在一个班级中的多个方法。
散射可能是一个小规模的问题。也许每个类中的每个方法都重复某种模式,但没有其他类正在使用它。在为这个课程创建一个小方面,而不是仅仅解决这些方法中的散布问题上没有什么坏处
相关问题
- 1. 什么是一起createjs雪碧缠结在一起的实例?
- 2. R:ggplot2中散射形状的默认排序是什么
- 3. 包装缠结指数数据在Sonar中显示的是什么?
- 4. 奇怪缠结
- 5. 结合散射和customBars在Dygraphs
- 6. 你使用AOP吗?和什么?
- 7. 什么是散列函数?
- 8. 什么是离散动画?
- 9. 什么是密码/散列?
- 10. “散货”是什么意思?
- 11. 是什么结构和类
- 12. MATLAB中的散射映射(散射) - NaN的MarkerEdgeColor
- 13. Spring AOP错过了什么
- 14. 在ThreeJS中结合THREE.ShaderLib.phong和次表面散射
- 15. C++中的映射函数是什么?
- 16. 这是什么样的散列加密?
- 17. 这是什么样的散列文件?
- 18. 这是什么样的散列/加密?
- 19. 松散XAML的局限性是什么?
- 20. 散居的安全问题是什么?
- 21. 这是什么样的散列?
- 22. 什么是松散耦合的代码?
- 23. 什么是注射返回?和什么可以在一个块?
- 24. 是NamedParameterJdbcTemplate和CGLIB在Spring AOP
- 25. Spring AOP创建的代理的范围是什么?
- 26. 什么是注射剂?
- 27. F#中不可变集合和映射的风格是什么
- 28. 什么是特定提交散列的树形散列?
- 29. Bloomfilter和Cassandra =为什么使用和为什么散列几次?
- 30. matlab中的条件散射