我熟悉这个术语:关注点的分离。这基本上是在提倡代码中的模块化。
然而,当我读到AOP的时候,它明确地说,它允许您将交叉关注点分开。
所以我的问题是,如果AOP将横切的关注点分开,那么OOP分离出哪种关注点呢?
发布于 2017-01-21 02:02:41
OOP将现实世界中的场景中的关注点分离开来,即将彼此与直接关联耦合在一起。
例如,一家公司有许多雇员,雇员有工资。
AOP的关注点不是直接关联,而是更多地像哨兵一样,超越对象到对象关系。
AOP的一个典型示例场景是日志记录。日志记录仍然由一个名为Logger的对象表示,但实际上,日志记录操作就像一个观察者,它过滤掉正常的流,并提取在幕后拦截流的信息。
虽然可以在不使用AOP的情况下实现日志记录,但实际上,您最终会使用与给定操作的目的无关的内容(例如:注册用户与日志记录无关)。
因此,您应该理解AOP强制执行并改进了关注点的良好分离,甚至将一些需求从您的视线中去掉,从而使代码更简单。
发布于 2017-01-21 02:17:00
简单的回答是: OOP分离抽象级别。设计良好的OOP代码将在整个模块中使用一组一致的抽象。
答案很长: OOP是建立在四个“支柱”之上的:
这使得程序员可以轻松地构建抽象层,每个层次都使用较低的抽象来提供更高的抽象。
例如,您可以从帧、消息、路由和会话(抽象)构建TCP/IP堆栈。当使用会话时,您不需要知道框架是如何被排斥的,以及冲突检测(封装)。此外,您可以在不知道是否使用IP4或IP6 (多态性)的情况下发送消息。所有级别都可以通过继承等方式使用相同的CRC检查。因此,这四个支柱一起提供了一种编程方法,可以创建非常干净的抽象级别。但是很多时候,OOP软件变得一团糟,抽象级别没有被清晰地分开。
AOP是OOP的补充。OOP专注于抽象级别和结构,AOP专注于与“关注点”相关的行为。它们是看待代码的正交方式。
https://stackoverflow.com/questions/41774070
复制