我熟悉这个术语:关注点分离。它几乎提倡代码中的模块化。
然而,当我阅读有关AOP的文章时,它明确表示它可以让您分开横切关注。
所以我的问题是,如果AOP将跨领域问题分开,OOP会分开什么样的担忧?
答案 0 :(得分:2)
OOP将在现实场景中相互耦合的关注与直接关联分开。
例如,公司有很多员工,员工有薪水。
AOP是关于不是直接关联的问题,更像是 sentinels ,它们超越了对象关系。
AOP的典型示例场景是 logging 。日志记录仍然由一个名为 Logger 的对象表示,但实际上日志记录操作就像一个观察者,它过滤掉正常流并提取拦截幕后流的信息。
虽然可以在没有AOP的情况下实现日志记录,但实际上您最终会使用与给定操作的目的无关的内容弄脏您的代码(例如:注册用户无关记录)。
因此,您应该了解AOP强制执行并改善了关注点的良好分离,甚至可以从您的眼睛中剔除一些要求,从而使代码更加简单。
答案 1 :(得分:0)
简短回答:OOP分离抽象级别。精心设计的OOP代码将在整个模块中使用一组一致的抽象。
答案很长:OOP建立在四个支柱上:
:这些允许程序员轻松构建抽象层,每个级别使用较低的抽象来提供更高的抽象。
例如,您可以从帧,消息,路由和会话(抽象)构建TCP / IP堆栈。使用会话时,您无需了解重新发送帧的方式以及冲突检测(封装)。此外,您可以在不知道是否使用IP4或IP6(多态)的情况下发送消息。并且所有级别都可以使用相同的CRC校验。遗产。所以这四个支柱一起允许一种编程方式,可以创建非常干净的抽象级别。但是,OOP软件常常变得混乱,抽象级别并没有完全分离。
AOP是对OOP的补充。 OOP专注于抽象级别和结构,AOP专注于与“关注”相关的行为。它们是查看代码的正交方式。