AOP基础知识

问题描述:

面向方面的编程是一个非常难以找到任何好信息的主题。我的旧软件工程教科书只是简单地(隐约地)提及它,*和其他各种教程/文章都能给我们提供超学术的,高度抽象的定义,它们是什么,如何使用它以及何时使用它。定义我似乎不明白。AOP基础知识

我(很差)AOP的理解是,有生产高品质的软件系统,它并不完全适合一个漂亮的小凝聚力包的许多方面。某些类,如记录器,验证器,数据库查询等将在整个代码库中使用,因此将会高度耦合。我的(同样,非常差差)对AOP的理解是它关心的是如何处理这些“通用耦合”包的最佳实践。

问:这是真的,还是我完全关闭?如果我完全错了,有人可以给一个简洁的外行解释AOP是什么,一个所谓的方面的例子,甚至可能提供一个简单的代码示例?

+4

有趣的问题也很好的质疑。 – 2011-01-27 17:41:24

问题的分离是软件开发中的一个基本原则,David Parnas有一篇经典论文,可能会向您介绍该主题并且还会读取Uncle Bob's SOLID Principles

但随后有可能被包含在许多用例如身份验证,授权,验证,日志,事务处理,异常处理,缓存等是产卵在软件的所有层横切关注点。如果你想解决这个问题没有重复和采用DRY原则,你必须以一种复杂的方式处理它。

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

你可以找到关于此主题的一个很好的章节中Sommerville's Software engineering book

相关链接 C2 wiki CrossCuttingConcernMSDNHow to Address Crosscutting Concerns in Aspect Oriented Software Development

+0

贾尼 - 感谢您的有益回应和链接。我需要一些时间来“消化”它们,但我相信在周末之后我会有更多有教养的问题。我现在会考虑回答这个问题,因为随后的问题会更具体。再次感谢! – Eugie 2011-01-27 18:31:23

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

面向方面编程基本上是分离横切关注点(非功能性),并制定它像安全,日志记录,监视器等方面一样,只要你在你的应用程序中需要它,就可以使用它作为插件&播放。只有干净的代码,更少的代码和程序员才能获得的好处可以专注于业务逻辑(核心问题),从而可以开发出更好的模块化和质量系统。

AOP是我们提取除去横切关注点(日志,异常处理,....)从我们的代码到它自己的方面的技术。让我们的原始代码只关注业务逻辑。这不仅使我们的代码更具可读性,可维护性,而且代码也是干的。

这可以用一个例子来更好地解释:

Aspect Oriented Programming (AOP) in the .net world using Castle WindsorAspect Oriented Programming (AOP) in the .net world using Unity