面向方面编程与面向对象编程

时间:2008-10-24 09:00:46

标签: oop aop paradigms

与大多数开发人员和整个世界一样,我多年来一直在使用面向对象编程(OOP)技术开发软件系统。因此,当我读到面向方面编程(AOP)解决传统OOP无法完全或直接解决的许多问题时,我会停下来思考,这是真的吗?

我已经阅读了很多信息,试图了解这个AOP范例的关键,并且我在同一个地方,所以,我想更好地理解它在现实应用程序开发中的好处。

有人有答案吗?

7 个答案:

答案 0 :(得分:297)

答案 1 :(得分:27)

OOP和AOP不是互斥的。 AOP可以很好地添加到OOP中。 AOP对于向方法添加标准代码(如日志记录,性能跟踪等)非常方便,而不会使用此标准代码堵塞方法代码。

答案 2 :(得分:27)

面向方面的编程提供了一种很好的方法来实现日志记录,安全性等跨领域问题。 这些交叉概念是必须在许多地方应用的逻辑部分,但实际上与业务逻辑没有任何关系。

你不应该把AOP看作是OOP的替代品,更像是一个不错的附加组件 使您的代码更加干净,松散耦合并专注于业务逻辑。 因此,通过应用AOP,您将获得两个主要好处:

  1. 每个问题的逻辑现在都放在一个地方,而不是散布在整个代码库中。

  2. 类更清晰,因为它们只包含主要关注点(或核心功能)的代码,而次要问题已转移到方面。

答案 3 :(得分:10)

我认为这个问题没有一般性的答案,但有一点需要注意的是,AOP不会替换 OOP,但会添加某些分解功能来解决所谓的暴政问题。主导作文1)(或横切关注点)。

只要您控制用于特定项目的工具和语言,它肯定会在某些情况下有所帮助,但也会增加关于方面交互的新复杂程度以及对{{{ {3}}仍然了解您的计划。

Gregor Kiczales曾在Google Tech Talks上就AOP做了一个有趣的介绍性演讲,我建议观看:AJDT

答案 4 :(得分:8)

首先,AOP不会取代OOP。 AOP扩展了OOP。 OOP的想法和实践保持相关。拥有一个好的对象设计可能会更容易扩展它与方面。

我认为AOP带来的想法非常重要。我们需要找到方法来实现程序中不同类的跨领域关注,而无需自己更改类。但我认为AOP最终将成为我们使用的其他工具的一部分,而不是一个单独的工具或技术。我们已经看到了这种情况。

像Ruby和Python这样的动态语言有像mixin这样的语言结构来解决同样的问题。这看起来很像AOP,但更好地集成在语言中。

Spring和Castle以及其他一些依赖注入框架可以选择向它们注入的类添加行为。这是一种做运行时编织的方法,我认为这有很大的潜力。

我认为你不必学习使用AOP的全新范例。这些想法很有趣,但现在慢慢地被现有的工具和语言所吸收。随时了解并试用这些工具。

答案 5 :(得分:1)

AOP是一种处理这一概念的新编程范例。一个方面是实现应用程序的特定非功能部分的软件实体。

我认为本文是面向方面编程的好地方: http://www.jaftalks.com/wp/index.php/introduction-to-aspect-oriented-programming/

答案 6 :(得分:1)

这个问题我来晚了,但这是我最喜欢的话题之一,所以让我分享我的看法。

OOP 主要用于组织您的业务逻辑,而 AOP 帮助组织您的非功能性事情例如审核,日志记录,事务管理,安全性

这样,您可以将业务逻辑与非虚构逻辑分离,从而使代码更简洁。

其他优点是,您可以非常一致地应用建议(例如审计),而无需实现任何接口,从而无需修改业务逻辑即可提供极大的修改灵活性