像这里和全世界的大多数开发人员一样,多年来我一直在使用面向对象编程(OOP)技术开发软件系统。因此,当我读到面向方面编程(AOP)解决了许多传统OOP不能完全或直接解决的问题时,我停下来思考,这是真的吗?
我已经阅读了大量的信息,试图学习这个AOP范式的关键,我也在同样的地方,所以,我想更好地理解它在现实世界应用程序开发中的好处。
有人知道答案吗?
像这里和全世界的大多数开发人员一样,多年来我一直在使用面向对象编程(OOP)技术开发软件系统。因此,当我读到面向方面编程(AOP)解决了许多传统OOP不能完全或直接解决的问题时,我停下来思考,这是真的吗?
我已经阅读了大量的信息,试图学习这个AOP范式的关键,我也在同样的地方,所以,我想更好地理解它在现实世界应用程序开发中的好处。
有人知道答案吗?
当前回答
OOP和AOP不是相互排斥的。 AOP可以是OOP的一个很好的补充。 AOP特别便于向方法添加标准代码,如日志记录、性能跟踪等,而不会用标准代码阻塞方法代码。
其他回答
OOP主要用来组织你的业务逻辑,而AOP帮助组织你的非功能性的东西,如审计、日志、事务管理、安全等。
通过这种方式,您可以将业务逻辑与非功能逻辑解耦,从而使代码更加清晰。
另一个优点是您可以非常一致地应用通知(例如审计),而不需要实现任何接口,这为修改提供了很大的灵活性,而不涉及业务逻辑。
这种方法很容易实现关注点分离和单一责任。
此外,当业务逻辑只解决业务问题时,很容易将业务逻辑从一个框架(比如Spring)移植到另一个框架(将来)
AOP是处理这一概念的一种新的编程范式。方面是实现应用程序特定的非功能性部分的软件实体。
我认为这篇文章是开始面向方面编程的好地方: http://www.jaftalks.com/wp/index.php/introduction-to-aspect-oriented-programming/
OOP和AOP不是相互排斥的。 AOP可以是OOP的一个很好的补充。 AOP特别便于向方法添加标准代码,如日志记录、性能跟踪等,而不会用标准代码阻塞方法代码。
面向方面的编程提供了实现横切关注点(如日志记录、安全性)的好方法。 这些横切关注点是必须应用于许多地方的逻辑片段,但实际上与业务逻辑没有任何关系。
你不应该把AOP看作是OOP的替代品,而应该看作是OOP的一个不错的附加 使您的代码更加干净、松散耦合并专注于业务逻辑。
因此,通过应用AOP,您将获得两个主要好处:
每个关注点的逻辑现在都在一个地方,而不是分散在整个代码库中。 类更简洁,因为它们只包含主要关注点(或核心功能)的代码,次要关注点已经转移到方面。
我认为这个问题没有通用的答案,但有一点需要注意,AOP并没有取代OOP,而是增加了某些分解特性,这些分解特性解决了所谓的主导组合(1)(或横切关注点)的暴政。
在某些情况下,只要您能够控制用于特定项目的工具和语言,它肯定会有所帮助,但它也增加了方面交互的复杂性,并且需要AJDT等其他工具来理解您的程序。
Gregor Kiczales曾经在谷歌Tech Talks上做了一个关于AOP的有趣的介绍性演讲,我推荐大家观看:面向方面的编程:模块化的根本研究。