面向方面编程的未来

时间:2009-06-06 06:49:00

标签: java aop aspects

我是AOP领域的新手。我第一次编写应用AOP概念的东西时,我很高兴能够理解方面如何消除应用程序中的交叉切割模式。考虑到解决交叉模式,如安全性,日志记录,交易,审计等应用AOP,我感到不知所措。
然而,当我第一次向我正在工作的客户提出使用AOP时,我被告知他们不支持它。有人告诉我,AOP意味着更多的维护!如果您的代码发生变化,您的切入点必须更改。因此,每当您更改应用它们的代码时,您可能必须分析,更改和测试您的方面?
关于这个你有什么要说的?为什么主流公司尚未开放广泛使用AOP? AOP世界在哪里?

6 个答案:

答案 0 :(得分:13)

AOP是一个相对较新的概念,大公司通常对新概念持谨慎态度。他们担心会遇到很多AOP代码而无法找到能够维护AOP代码的人。

对于具体的批评,似乎没有知情或被误解。 AOP的重点是通过减少跨领域关注领域的代码重复来减少维护工作。但是,通过使代码更难理解,它可以使维护变得更加困难 - 使用AOP时,当您查看特定代码时,总是有可能在其他地方定义的方面完全改变其行为。

就个人而言,我不确定AOP的好处(真的有那么多跨领域的问题吗?)超过了这个问题。我可以看到解决它的唯一方法是通过IDE中的支持;但是让你更依赖IDE也不是一件好事。

趋势似乎是针对应用程序服务器和框架,以类似于AOP(即中央声明性定义)的方式解决特定的,重要的跨领域问题,如事务和安全性,但没有给您充分的权力来混淆维护开发人员。

答案 1 :(得分:4)

AOP是一个有趣的想法之一,它在实践中并不能很好地发挥作用。 Java现在可以使用AOP十年或更长时间了,它的使用不多,因为它似乎引入了更多的问题而不是修复它。

答案 2 :(得分:3)

  

有人告诉我,AOP意味着更多的维护!

这只是愚蠢而且完全错误。 AOP是一种必不可少的工具,可以从代码中消除噪音,让您专注于提供业务价值。当业务规则发生变化时,您无需花费数英里的框架逻辑来反映代码中的新变化。

与任何工具一样,您必须确保正确使用它。我不得不解决这样一个事实:我的AOP日志记录会无意中记录解密的信用卡:

http://www.agileatwork.com/what-happens-when-you-actually-use-aop-for-logging/

答案 3 :(得分:1)

我必须在应用程序上进行一些性能优化,然后我选择在AspectJ中编写自定义分析器。我一开始对使用AOP持怀疑态度,但我意识到它绝对是这项工作的完美工具。

然而,有很多工作我不会用它。我会非常谨慎地将它用于可能影响应用程序功能的任何事情。额外的间接层和缺乏透明度会给尝试添加功能或修复错误的开发人员带来太多问题。

答案 4 :(得分:1)

人们忘记了Java注释及其在Guice和Spring等框架中的使用受到了AOP的启发。我想说Java注释是今天AOP的发展方向。

答案 5 :(得分:1)

我们使用AspectJ AOP实现,并对它非常满意。您应该将其视为工具包的另一部分,使得某些概念在“普通”java中更容易表达。我们目前主要用它来为我们的服务提供JMX接口。

确实有更多的IDE应该支持它(我正在看你JetBrains!),这肯定有助于采用。

相关问题