【问题标题】:AOP FundamentalsAOP 基础
【发布时间】:2011-06-16 17:30:59
【问题描述】:

面向方面的编程是一个我很难找到任何好的信息的主题。我的旧软件工程教科书仅简要(含糊地)提及它,而我在其上找到的维基百科和各种其他教程/文章给出了关于它是什么、如何使用的超学术、高度抽象的定义它,以及何时使用它。我似乎不明白的定义。

我对 AOP 的(非常差的)理解是,生产高质量软件系统的许多方面并不完全适合一个漂亮的小内聚包。某些类,例如 Loggers、Validators、DatabaseQueries 等,将在您的代码库中使用,因此将是高度耦合的。我(再次,非常差)对 AOP 的理解是,它关注的是如何处理这些类型的“通用耦合”包的最佳实践。

问题:这是真的吗,还是我完全不在了?如果我完全错了,谁能给一个简明的外行解释什么是 AOP,一个所谓的 aspect 的例子,甚至可以提供一个简单的代码示例?

【问题讨论】:

  • 很好的问题也很好地提出了质疑。

标签: aop


【解决方案1】:

AOP 是一种技术,我们将代码中的横切关注点(日志记录、异常处理……)提取并移除到它自己的方面。让我们的原始代码只关注业务逻辑。这不仅使我们的代码更具可读性、可维护性,而且代码是 DRY 的。

这可以通过一个例子更好地解释:

Aspect Oriented Programming (AOP) in the .net world using Castle Windsor 要么 Aspect Oriented Programming (AOP) in the .net world using Unity

【讨论】:

    【解决方案2】:

    关注点分离是软件开发的基本原则,David Parnas 的经典论文On the Criteria To Be Used in Decomposing Systems into Modules 可以向您介绍该主题并阅读Uncle Bob's SOLID Principles

    但是,在许多用例中可能包含横切关注点,例如身份验证、授权、验证、日志记录、事务处理、异常处理、缓存等,这些问题催生了软件中的所有层。如果你想在不重复的情况下解决问题并采用 DRY 原则,则必须以复杂的方式处理它。

    您必须使用声明式编程,简单地在 .net 中可以通过属性注释方法或属性,随后发生的事情是根据这些注释在运行时更改代码的行为。

    您可以在Sommerville's Software engineering book 中找到有关此主题的精彩章节

    有用的链接 C2 wiki CrossCuttingConcernMSDNHow to Address Crosscutting Concerns in Aspect Oriented Software Development

    【讨论】:

    【解决方案3】:

    面向方面的编程基本上是为了分离横切关注点(非功能性)并将其开发为方面,例如安全性、日志记录、监视器等,在您的应用程序中需要时将其放在一边,您可以使用它作为即插即用。我们唯一能做到的好处是代码干净,代码更少,程序员可以专注于业务逻辑(核心关注点),从而可以开发出更好的模块化和质量系统。

    【讨论】:

      【解决方案4】:

      AOP 是关于横切关注点的,即您需要在整个应用程序中执行的操作。例如日志记录。假设您想在进入和退出一个方法时进行跟踪。这在方面很容易。您基本上为事件指定“处理程序”,例如输入方法。如有必要,您还可以使用“通配符”指定您感兴趣的方法,然后只需编写处理程序代码即可,例如记录一些信息。

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 2013-12-30
        • 2022-09-29
        • 1970-01-01
        • 2017-06-20
        • 2016-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多