【问题标题】:How does Aspect Oriented Programming (AOP) influence code quality?面向方面的编程 (AOP) 如何影响代码质量?
【发布时间】:2023-03-22 00:40:01
【问题描述】:

Aspect Oriented Programming (AOP) 似乎是一个有趣的概念。起初我对此非常感兴趣,但当我阅读更多内容并看到人们描述的用例时,我变得很失望。

我看到的很多网站,以及 AspectC++ 开发人员的演示文稿,都展示了我认为相当可疑的用例。

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

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

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

除了调试机制之外,AOP 是否有用?

【问题讨论】:

标签: language-agnostic aop paradigms uses


【解决方案1】:

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

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

【讨论】:

  • 我同意你最后的说法,但我不确定其他人的看法。使用 AOP 来增加安全性只是拼凑。此外,安全性是程序的重要组成部分,您不能只是将其换入或换出而没有后果。从我所见,AOP 非常适合那些“不重要”的事情,如果你把它们关掉就不会真正影响你的行为;因此,由于它们不会影响您的行为,因此您希望将它们与实际逻辑分开。
  • 好吧,我试图解决的情况是应用程序已经存在并且没有得到保护(例如旧的内部业务线应用程序,可能是某个部门内部开发的东西),而你有事后很好地增加安全性。重做应用程序的框架可能不可行(在经济上可能),但此时您可以使用 AOP 添加安全性。我个人永远不会这样开始。
  • @mgroves 一直在谈论 AOP。 mgroves.com 他在 PostSharp 上卖掉了。但是,我还没有真正找到 AOP 在尚未提供服务的精心设计的框架中的用途。当事件流水线发生时,您总是可以直接进入管道并做您需要的事情。 AOP 非常神奇,甚至不是约定优于配置。魔术在代码中很糟糕,以后有人将无法轻易说出行为存在的原因。
猜你喜欢
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2010-09-06
  • 2011-06-27
  • 2010-11-24
  • 2010-09-18
相关资源
最近更新 更多