什么是面向方面编程?

时间:2008-11-26 03:08:26

标签: aop

重复:

  

What is aspect-oriented programming?

每次我在这里播客或阅读关于它的博客文章,即使在这里,它们也会让它听起来像字符串理论或其他东西。用类固醇依赖注射来描述OOP的最佳方法是什么?

每当有人试图解释它时,就像Aspects,[花生卡通声音的成人],正交,[更多噪音],交叉问题等等。说真的,任何人都可以用外行的话来形容它。

5 个答案:

答案 0 :(得分:30)

Laymans术语让我举个例子。假设您有一个Web应用程序,并且需要添加错误日志记录/审核。一个实现是进入每个公共方法并添加try catch块等...

面向Aspect的方面说hogwash,让我为你的方法注入我的方法,例如,而不是调用YourClass.UpdateModel(),系统可能会调用,

LoggingHandler.CallMethod()然后,此方法可能会将调用重定向到UpdateModel,但会将其包装在try catch块中以处理日志记录错误。

现在的诀窍是,这种重定向会自动发生,通过配置或将属性应用于方法。

这适用于您所说的跨界事物,这是每个域中非常常见的编程元素,例如:日志记录,审计,事务管理,授权。

它背后的想法是从您的业务/应用程序层中删除所有这些常见的管道代码,以便您可以专注于解决问题,而不必担心记录此方法调用或该方法调用。

答案 1 :(得分:9)

.NET中的类和方法属性是面向方面编程的一种形式。您使用属性装饰您的类/方法。在幕后,这会为您的类/方法添加代码,以执行属性的特定功能。例如,标记可序列化的类允许它自动序列化以便存储或传输到另一个系统。其他属性可能会将某些属性标记为不可序列化,并且这些属性将自动从序列化对象中省略。序列化是一个方面,由系统中的其他代码实现,并通过应用“配置”属性(装饰)应用于您的类。

答案 2 :(得分:2)

AOP是关于管理应用程序内的通用功能(跨越应用程序,因此交叉切割),使其不嵌入业务逻辑中。

此类跨领域问题的示例包括日志记录,管理安全性,事务管理等。

Frameworks允许在一些配置文件的帮助下自动管理。

答案 3 :(得分:1)

我目前使用Post Sharp,我会从他们的网站上阅读信息。我用它来提供方法调用的安全性。

  

“PostSharp是一个用于分析和转换.NET程序集的开放平台。它附带了PostSharp Laos,这是一个功能强大而又简单的插件,可以让您开发实际添加代码行为的自定义属性.PostSharp Laos是面向.NET Framework的面向方面编程(AOP)解决方案。“

答案 4 :(得分:1)

经典的例子是安全性和日志记录。不是在你的应用程序中编写代码来记录x的出现或检查对象z的安全访问控制,而是有一个正常代码“带外”的语言装置,它可以系统地注入安全性或登录到不能实际拥有它们的例程中。这样一种方式,即使你的代码不提供它 - 它也会照顾它。

更具体的示例是操作系统为文件提供访问控制。软件程序不需要检查访问限制,因为底层系统可以为它工作。

如果您认为根据我的经验需要AOP,您实际上需要投入更多时间和精力进行系统内适当的元数据管理,重点是经过深思熟虑的结构/系统设计。