你用AOP吗?什么?

时间:2008-12-20 02:26:27

标签: .net aop

我对Aspect Orientated Programming(Spring,PostSharp等)非常感兴趣。我可以想到我将采用的几种方法,主要是记录日志或延迟负载。我希望看到其他人用它做什么?

请列出您使用AOP解决的Senarios。 (很有可能它会鼓励其他人去接它)

欢呼声

4 个答案:

答案 0 :(得分:3)

我同意cliff.meyers的帖子(如果可以,我会投票支持)。特别是他对伐木的评论。使用方面进行日志记录更类似于跟踪。

在AOP上的se-radio.net上有两个播客。 first,对Gregor Kiczales的采访,他对AOP进行了大量研究; second,最近对Christa Schwanninger和Iris Groher的采访重点介绍了如何在实践中使用AOP。两者都值得一听。

最后,要小心你如何采用AOP。过分关注AOP而您正专注于平台而不是提供商业价值。我从未被指示通过测试用例使用AOP。在重构应用程序以删除重复时,我会介绍一些方面。

答案 1 :(得分:2)

我在2007/2008期间将AOP用于一个主要项目。我工作的公司让我开发了一个自定义CMS来管理他们的客户。它已集成到我们开发的自定义框架中,并可通过我们的规则引擎根据用户的元数据有条件地呈现内容。

我们的环境分为传统的Dev / QA / Staging / Production。我们需要一种在环境之间迁移实体(无论是内容还是其他数据)的方法。我使用AOP跟踪属性值的更改,实质上是记录和版本化在下层环境中所做实体的所有更改。使用反射,通过在目标环境中“重放”源环境中所做的更改来复制实体。我调用了系统ChangeFlow,因为它已集成到工作流系统中。内容审批者可以批准当前版本,这将启动迁移。任何对象都可以通过从公共基类派生并向需要跟踪的方法和属性添加一些属性来“启用ChangeFlow”。

答案 2 :(得分:1)

C#中的属性可以是AOP的示例 - 例如,ASP.NET MVC中的AuthorizeAttribute对使用该属性修饰的方法或类应用授权要求。

答案 3 :(得分:1)

  • 安全性 - 声明所需的权限/角色并应用一些了解当前委托人的建议以做出授权决定
  • 对象修剪 - 使用建议
  • 剪掉对象图的各个部分
  • 事务 - 将事务性行为应用于不了解事务性的方法
  • 计时代码

记录经常被引用作为一个例子,但在实践中我发现它不是很有用。方法内部的记录语句往往更有价值。

如上所述,向类或方法添加属性,然后使用AOP来内省元数据并执行逻辑是将逻辑与代码分离的好方法。您也可以在单独的工件(XML)中进行声明,但我发现属性方法非常强大。