首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在.Net中实现面向方面编程的最佳方案是什么?

在.Net中实现面向方面编程的最佳方案是什么?
EN

Stack Overflow用户
提问于 2009-03-11 08:14:21
回答 5查看 44.5K关注 0票数 85

在C#、VB.net中有很多面向方面的实现。这是一些AOP实现:

Twente University

  • Compose*

  • SetPoint

  • C48<提供了作为其functionality

在.Net中实现面向方面编程的最佳方案是什么?我应该使用什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-11 09:12:31

如果动态拦截能够满足您的需求,我认为Castle Dynamic Proxy是首选的解决方案。这个框架被许多想要提供AOP功能的其他框架在内部使用。通常,大多数现有的IoC容器现在都提供了一些动态拦截机制(Spring.NET、Castle Windsor、StructureMap等)。如果您已经使用过IoC容器,那么查看它的建议可能会更容易一些。

如果动态拦截不能满足您的需求(编织密封类、截获非虚拟调用等),那么您肯定需要静态编织。PostSharp是此域中的参考。

请注意,它还存在Linfu,可用于利用这两种面向方面编程方式。

票数 45
EN

Stack Overflow用户

发布于 2009-03-11 08:20:08

“最好的”是主观的。

首先,列出你需要的特性,你的架构,等等。然后寻找你需要的选项,而不引入不必要的复杂性。例如,有几个是面向接口的:你的代码当前是面向接口的吗?如果不是这样,PostSharp可能是更好的选择(被编织到原始类中)。但当然,PostSharp不能在运行时配置...赛马的课程。

票数 15
EN

Stack Overflow用户

发布于 2012-12-28 07:54:13

在.NET中进行面向方面编程的最好方法是使用众所周知的设计技术。例如,通过应用SOLID principles,您可以获得添加横切关注点所需的灵活性和模块性。如果您的设计正确,您甚至可以在没有任何框架的情况下应用大多数横切关注点。认为OOP不适合做AOP是一种谬误。

以下是一些建议:

  • 不依赖于具体的实例,而是依赖于在同一个类中混合横切关注点和业务逻辑。
  • 通过在实现这些关注点的类中使用业务逻辑包装类来添加横切关注点,并对设计中的公共构件进行同等建模,最好使用相同类型的抽象。以thisthis为例。

当您有了正确的抽象后,向系统添加新的横切关注点只需编写一个新的装饰器类并将其包装在正确的实现中即可。如果抽象是通用的,您可以将单个装饰器包装在一大组类周围(这正是AOP的意义所在)。

虽然像动态代理和代码编织这样的技术可以更容易地处理设计糟糕的应用程序,但对于良好的设计来说,确实没有其他选择。迟早你会被烧死。但是,这并不意味着不应该使用动态代理生成和代码编织。但是,如果没有适当的应用程序设计,即使这些技术也只能起到很小的帮助作用。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/633710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档