在我看来,AOP是一个有趣的编程范例。然而,在stackoverflow上还没有关于它的讨论(至少我找不到它们)。你对它有什么总体的看法?你在你的项目中使用AOP吗?或者你认为它是一种小众技术,不会存在很长一段时间,或者不会成为主流(就像OOP一样,至少在理论上是这样;)?
如果您使用AOP,那么请让我们知道您也使用了哪些工具。谢谢!
发布于 2008-08-21 18:14:55
是。
正交关注点,比如安全性,最好用AOP风格的拦截来完成。这是自动完成的(通过依赖注入容器)还是手动完成,这对最终目标并不重要。
一个例子:xUnit.net (我运行的一个开放源码项目)中的“之前/之后”属性是一种面向方面编程风格的方法拦截。您使用这些属性来修饰您的测试方法,并且就在该测试方法运行之前和之后,调用您的代码。它可以用于设置数据库和回滚结果,更改运行测试的安全上下文等。
另一个例子:ASP.NET MVC中的过滤器属性也类似于专门的面向方面编程风格的方法拦截器。例如,如果未处理的错误发生在您的操作方法中,它允许您说明应如何处理这些错误。
许多依赖注入容器,包括Castle Windsor和Unity,都支持这种行为,要么“在盒子里”,要么通过使用扩展。
发布于 2008-08-21 18:46:36
Python通过允许您在运行时动态修改其类来支持AOP (在Python中通常称为monkeypatching而不是AOP)。以下是我的一些AOP用例:
这种事情并不经常出现,但每当它出现时,monkeypatching都是非常有用的。Python也有装饰器来实现装饰器设计模式(http://en.wikipedia.org/wiki/Decorator_pattern)来完成类似的事情。
请注意,动态修改类还可以让您绕过bugs或向第三方库添加功能,而无需实际修改该库。我几乎从来不需要这样做,但它出现的少数几次是非常有用的。
发布于 2008-10-17 20:05:20
我不明白如何在不使用AOP的情况下以一种干净的方式处理横切关注点,如日志、安全性、事务管理、异常处理。
任何使用Spring框架的人(大约50%的Java企业开发人员)都在使用AOP,不管他们知不知道。
https://stackoverflow.com/questions/20663
复制相似问题