language-agnostic - 面向切面编程 (AOP) 如何影响代码质量?

标签 language-agnostic aop paradigms uses

Aspect Oriented Programming (AOP) 似乎是一个有趣的概念。起初我对此非常热情,但随着我阅读更多并看到人们描述的用例,我感到失望。

我看到的很多网站,加上 AspectC++ 开发人员的演示,都介绍了我觉得相当可疑的用例。

他们讨论了如何使用 AOP 进行错误处理(抛出异常)、对参数和返回值进行边界检查、在出现问题时返回安全的空对象、安全性等。这些只是不好的例子吗(和不是实际用例),还是我遗漏了什么?

当您调用一个函数时,您应该如何知道发生了什么?几乎任何事情都可能发生,这取决于您决定应用的方面。这不会把事情搞得一团糟吗? API 文档呢,我应该怎么写?

到目前为止,我所见过的 AOP 唯一好的用例是诸如日志记录或分析之类的东西——它们不会影响实际的逻辑流,并且仅用作调试工具。

除了调试机制之外,AOP 对其他任何东西都有用吗?

最佳答案

当您的关注点与应用程序的主要关注点(称为正交关注点)无关时,AOP 最有用。当您必须向现有代码添加一个关注点(比如为内部私有(private)使用而构建的东西的安全性)或者必须添加出于某种原因不适合您的域模型而不会真正模糊您的功能时,它会非常方便业务逻辑。

我不会在任何你想知道调用函数时会发生什么的地方使用它。对我来说,这似乎是代码的味道。

关于language-agnostic - 面向切面编程 (AOP) 如何影响代码质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573300/

相关文章:

algorithm - 使用子树查找相似的代码段

c - 有没有一种简单的方法可以从源代码中找到哪些其他函数可以调用某个函数?

java - Spring aop中@Before @After和@AfterExecution有什么区别

programming-languages - 使用哪种编程范例?

database - 您是否创建类来处理数据驱动应用程序的 "entities"?

language-agnostic - 一个类是否应该有静态和非静态成员

c# - 我没有源代码的程序集上的 PostSharp

java - 当我想拦截一个方法时,我只能用接口(interface)子类化吗?

multithreading - 如何在后台自动运行?

paradigms - 语言必须具备哪些属性才能支持递归?