Language agnostic 面向方面编程(AOP)如何影响代码质量?

Language agnostic 面向方面编程(AOP)如何影响代码质量?,language-agnostic,aop,paradigms,uses,Language Agnostic,Aop,Paradigms,Uses,(AOP)似乎是一个有趣的概念。一开始我对它很感兴趣,但当我读到更多的东西,看到人们描述的用例时,我开始失望了 我看到的许多站点,加上AspectC++开发人员的演示,都展示了我觉得相当可疑的用例 他们讨论了如何使用AOP进行错误处理(抛出异常)、对参数和返回值进行边界检查、在出现错误时返回安全的空对象、安全性等。这些只是坏例子(而不是实际用例),还是我遗漏了什么 调用函数时,您应该如何知道发生了什么?实际上,任何事情都可能发生,这取决于您决定应用的方面。那不是会把事情搞得一团糟吗?API文档呢

(AOP)似乎是一个有趣的概念。一开始我对它很感兴趣,但当我读到更多的东西,看到人们描述的用例时,我开始失望了

我看到的许多站点,加上AspectC++开发人员的演示,都展示了我觉得相当可疑的用例

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

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

到目前为止,我所看到的AOP的唯一好的用例是日志记录或分析之类的东西——这些东西不会影响实际的逻辑流,只能用作调试工具


AOP对于除调试机制之外的任何其他功能都有用吗?

AOP在存在与应用程序的主要关注点(称为正交关注点)无关的关注点时最有用。当您必须向现有代码添加关注点(例如为内部专用而构建的代码的安全性)或必须添加由于任何原因不适合您的域模型而不真正模糊您的业务逻辑的功能时,它会非常方便


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

可能的重复我认为更多的是关于示例使用,这似乎更多的是关于理论和对代码质量的影响。我同意你的上一句话,但我不确定其他的。使用AOP添加安全性只是一个补丁。此外,安全性是程序的一个重要组成部分,您不能随意将其交换。从我所看到的,AOP对于那些“不重要”的东西是非常好的,如果你关闭它们,它们不会真正影响你的行为;因此,由于它们不会影响您的行为,您希望将它们与实际逻辑分离。好吧,我试图理解的是,应用程序已经存在并且没有安全性的情况(比如旧的内部业务线应用程序,可能是某个部门内部开发的)你必须在事后增加安全性。重做应用程序的框架可能不可行(经济上可能),但此时可以使用AOP增加安全性。我个人永远不会这样开始。@mgroves一直在谈论AOP。他在波斯夏普被出卖了。然而,我还没有真正找到AOP在一个设计良好的框架中的用途,而这个框架还没有被提供。当事件发生管道化时,您总是可以直接进入管道并执行您需要的操作。AOP是非常神奇的,甚至不是常规的配置。代码中的魔法是不好的,以后的人将无法解释为什么一种行为很容易存在。