15

复制:

什么是面向方面编程?

每次我在这里播客或阅读有关它的博客文章时,即使是在这里,他们也让它听起来像弦理论或其他东西。用类固醇上的依赖注入来描述它的最佳方式是 OOP 吗?

每次有人试图解释它时,就像,Aspects,[来自花生卡通声音的成人声音],正交,[更多噪音],横切关注点等。说真的,任何人都可以用外行的话来描述它。

4

5 回答 5

32

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

面向方面的说废话,让我在你的方法周围注入我的方法,例如,系统可能会调用,而不是调用 YourClass.UpdateModel(),

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

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

正如您所说,这适用于横切事物,这些事物是每个域中都存在的非常常见的编程元素,例如:日志记录、审计、事务管理、授权。

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

于 2008-11-26T03:15:17.863 回答
10

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

于 2008-11-26T03:28:22.067 回答
2

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

此类横切关注点的示例是日志记录、管理安全性、事务管理等。

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

于 2008-11-26T03:32:32.883 回答
1

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

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

于 2008-11-26T03:20:15.467 回答
1

经典的例子是安全和日志记录。不是在应用程序中编写代码来记录 x 的出现或检查对象 z 以进行安全访问控制,而是有一个普通代码的“带外”语言装置,它可以系统地注入安全性或登录到天然没有它们的例程中这样即使您的代码不提供它 - 它也会得到照顾。

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

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

于 2008-11-26T03:32:22.963 回答