首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你在生产软件中使用AOP (面向方面的编程)了吗?

你在生产软件中使用AOP (面向方面的编程)了吗?
EN

Stack Overflow用户
提问于 2008-08-21 17:56:10
回答 11查看 8.8K关注 0票数 38

在我看来,AOP是一个有趣的编程范例。然而,在stackoverflow上还没有关于它的讨论(至少我找不到它们)。你对它有什么总体的看法?你在你的项目中使用AOP吗?或者你认为它是一种小众技术,不会存在很长一段时间,或者不会成为主流(就像OOP一样,至少在理论上是这样;)?

如果您使用AOP,那么请让我们知道您也使用了哪些工具。谢谢!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-08-21 18:14:55

是。

正交关注点,比如安全性,最好用AOP风格的拦截来完成。这是自动完成的(通过依赖注入容器)还是手动完成,这对最终目标并不重要。

一个例子:xUnit.net (我运行的一个开放源码项目)中的“之前/之后”属性是一种面向方面编程风格的方法拦截。您使用这些属性来修饰您的测试方法,并且就在该测试方法运行之前和之后,调用您的代码。它可以用于设置数据库和回滚结果,更改运行测试的安全上下文等。

另一个例子:ASP.NET MVC中的过滤器属性也类似于专门的面向方面编程风格的方法拦截器。例如,如果未处理的错误发生在您的操作方法中,它允许您说明应如何处理这些错误。

许多依赖注入容器,包括Castle Windsor和Unity,都支持这种行为,要么“在盒子里”,要么通过使用扩展。

票数 15
EN

Stack Overflow用户

发布于 2008-08-21 18:46:36

Python通过允许您在运行时动态修改其类来支持AOP (在Python中通常称为monkeypatching而不是AOP)。以下是我的一些AOP用例:

  1. 我有一个网站,其中每个页面都是由Python函数生成的。我想上一个类,让这个类生成的所有网页都有密码保护。在调用每个函数之前,我会进行适当的会话检查并在必要时进行重定向。
  2. 我希望在程序的实际使用期间对程序中的一些函数进行一些日志记录和性能分析。
  3. 我有一个充满非线程安全函数的模块或类,我发现自己在一些多线程代码中使用它。一些AOP在这些函数调用周围添加了锁定,而不必进入库并进行任何更改。

这种事情并不经常出现,但每当它出现时,monkeypatching都是非常有用的。Python也有装饰器来实现装饰器设计模式(http://en.wikipedia.org/wiki/Decorator_pattern)来完成类似的事情。

请注意,动态修改类还可以让您绕过bugs或向第三方库添加功能,而无需实际修改该库。我几乎从来不需要这样做,但它出现的少数几次是非常有用的。

票数 22
EN

Stack Overflow用户

发布于 2008-10-17 20:05:20

我不明白如何在不使用AOP的情况下以一种干净的方式处理横切关注点,如日志、安全性、事务管理、异常处理。

任何使用Spring框架的人(大约50%的Java企业开发人员)都在使用AOP,不管他们知不知道。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档