当前位置:  开发笔记 > 编程语言 > 正文

.Net中AOP的最佳实现是什么?

如何解决《.Net中AOP的最佳实现是什么?》经验,为你挑选了4个好方法。

在C#,VB.net中有很多AOP实现.这是一些AOP实现:

PostSharp

LOOM.NET

Aspect.NET

企业库3.0策略注入应用程序块

AspectDNG

DotSpect(.SPECT)

在Spring.NET框架作为其功能的一部分

Wicca和Phx.Morph

Twente大学提供了针对.NET的AOSD解决方案的详尽分析

Seasar.NET

方面#

Puzzle.NAspect

撰写*

设定点

NConcern .NET AOP框架

...

.Net中AOP的最佳实现是什么?我应该用什么?



1> Romain Verdi..:

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

如果动态拦截无法满足您的需求(编织密封类,拦截非虚拟调用等),那么您肯定需要静态编织.PostSharp是此域中的引用.

请注意,它也存在Linfu,可用于利用两种AOP时尚.


如果你想做运行时AOP,那就+1.如果您想要编译后时间AOP,请在PostSharp上+1

2> Marc Gravell..:

"最好"是主观的.

首先,列出您需要的功能,架构等列表.然后查找满足您需求的选项,而不会引入不必要的复杂性.例如,有几个面向接口:您的代码目前是面向接口的吗?如果没有,PostSharp可能是更好的选择(被编织到原始类中).但是当然,PostSharp无法在运行时配置......马匹用于课程.



3> Steven..:

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

以下是一些指示:

不依赖于具体实例,而是依赖于抽象.

不要将横切关注点和业务逻辑混合在同一个类中.

通过在实现这些关注的类(装饰器)中使用业务逻辑包装类来添加横切关注点.

在设计中查找常见工件并对它们进行相同的建模,最好使用相同类型的抽象.例如,看看这个和这个.

当你得到正确的抽象时,向系统添加新的横切关注点只需要编写一个新的装饰器类并将其包装在正确的实现中.如果抽象是通用的,你可以围绕一大组类包装一个装饰器(这正是AOP的意思).

虽然动态代理和代码编织等技术可以更容易地使用设计糟糕的应用程序,但是对于良好的设计来说真的没有其他选择.迟早你会被烧伤.这并不意味着不应该使用动态代理生成和代码编织.但如果没有适当的应用程序设计,即使这些技术也只是略有帮助.


如果使用异常块将每次调用都包装到数据库中,那么无论如何都是错误的.它回归到了良好的设计.总是.
@OutOFTouch:看一下[这个SO问题]的答案(http://stackoverflow.com/questions/9892137).
@SleeperSmith:虽然我不确定"AOP是下一级抽象"意味着什么,但我认为你不能在不使用AOP的情况下保持大型系统的可维护性.我相信应用AOP.然而,AOP是一种范式; 不是工具.我同意继承的限制,但它不是导致AOP的组成限制.缺乏适当的设计导致使用代码编织和动态代理工具.我使用装饰器应用横切关注点.这是我应用AOP的首选方式.

4> Mendelt..:

我不知道最好的,有很多框架,并没有足够的时间来尝试所有.

我确实使用了PostSharp,并且惊喜地发现它是多么容易.

我还查看了Castle Windsor和Spring.Net的AOP,方法不同(运行时与编译时).混合AOP和IoC似乎是有道理的.如果你没有使用其中一个框架,那么开始时要做的工作要多得多,但不要让它阻止你.

对于新项目,我现在可能会使用Castle Windsor,但这主要是因为我还想使用IoC.如果我必须快速将AOP实现到现有代码库中,我将使用PostSharp.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有