面向方面的编程是我很难找到任何好的信息的主题。我的旧软件工程教科书只是简单地(和模糊地)提到它,维基百科和我能够在其上找到的各种其他教程/文章给出了超学术,高度抽象的定义,它是什么,如何使用它,何时使用它。定义我似乎并不理解。
我对AOP的理解非常糟糕,因为制作高质量的软件系统有很多方面不能很好地融入一个很好的小巧的内容。一些类,如Loggers,Validators,DatabaseQueries等,将在您的代码库中使用,因此将是高度耦合的。我对AOP的理解(再次,非常差)是它关注如何处理这些类型的“通用耦合”软件包的最佳实践。
问题:这是真的吗,还是我完全不在了?如果我完全错了,有人可以为AOP提供一个简明扼要的解释,一个所谓的方面的例子,甚至可能提供一个简单的代码示例吗?
答案 0 :(得分:13)
关注点分离是软件开发的一个基本原则,David Parnas On the Criteria To Be Used in Decomposing Systems into Modules有一篇经典论文可能会向您介绍该主题并阅读Uncle Bob's SOLID Principles。
但是,有一些Cross Cutting问题可能会包含在许多用例中,例如身份验证,授权,验证,日志记录,事务处理,异常处理,缓存等,它们会在软件中生成所有层。如果你想解决问题而不重复并采用DRY原则,你必须以复杂的方式处理它。
你必须使用声明性编程,简单地在.net中可以通过属性注释方法或属性,以后发生的事情是根据这些注释改变运行时代码的行为。
您可以在Sommerville's Software engineering book
中找到关于此主题的精彩章节有用的链接 C2 wiki CrossCuttingConcern,MSDN,How to Address Crosscutting Concerns in Aspect Oriented Software Development
答案 1 :(得分:2)
AOP是一种技术,我们从代码中提取并删除横切关注点(日志记录,异常处理......)到它自己的方面。让我们的原始代码只关注业务逻辑。这不仅使我们的代码更易读,更易于维护,而且代码也是DRY。
这可以通过一个例子更好地解释:
Aspect Oriented Programming (AOP) in the .net world using Castle Windsor 要么 Aspect Oriented Programming (AOP) in the .net world using Unity
答案 2 :(得分:0)
AOP是关于横切关注点,即您需要在整个应用程序中执行的操作。例如日志记录。假设您想要在进入和退出方法时进行跟踪。方面很容易。您基本上为事件指定了“处理程序”,例如输入方法。如果有必要,您还可以使用“通配符”指定您感兴趣的方法,然后只需编写处理程序代码,例如可以记录一些信息。
答案 3 :(得分:0)