As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




已关闭8年。



  • ASP.NET MVC建议使用或扩展内置的Authorization,Action,Result,Exception筛选器。
  • 第三方.Net IoC容器(Unity,Ninject,Autofac)提出拦截器
  • 第三方AOP工具(Postsharp)提出其属性。

  • 现在,我搞砸了。也许我把它们都混合了。
    我想构建健壮的代码和稳定的方法,应该使用什么?

    最佳答案

    这一切都始于良好的应用程序设计。当您的应用程序设计正确时,您将没有太多理由与UI框架公开的那些AOP之类的功能进行交互(这也适用于WCF)。

    例如,当您将所有业务逻辑隐藏在通用接口(interface)之后,并将命令消息传递给该接口(interface)时(如this article所示),您的 Controller 将成为精简包装,通常只执行这些业务命令就不多了。在这种情况下,您将能够通过包装那些业务操作来实现授权和异常过滤,而使UI代码保持干净并且没有属性。可以通过拦截或plain old decorators来解决围绕业务运营的所有交叉问题。这为您提供了更大的灵活性,并使您的设计保持SOLID(它具有很多不太明显的长期好处)。

    尽管使用了诸如PostSharp之类的代码编织工具,但您仍应谨慎使用它们。他们使用后编译过程将代码注入(inject)到您的程序集中。这使得对那些类进行单元测试而不碰到那些方面变得非常痛苦。您不能轻易地单独测试那些类(这是单元测试的先决条件)。使方面取决于某些静态变量会使方面和单元测试都变得复杂。静态变量使并行运行单元测试变得困难,并且使用全局常数将要求测试正确拆除更改的全局设置,以防止其他测试受到影响。

    尽管代码编织工具产生的性能通常比拦截性能要好,但是与使用装饰器相比,并没有提高性能。

    关于asp.net-mvc - AOP与MVC过滤器属性与拦截器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15008834/

    10-13 06:03