Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET MVC 3应用程序中处理横切关注点?_C#_.net_Asp.net Mvc_Aop_Cross Cutting Concerns - Fatal编程技术网

C# 如何在ASP.NET MVC 3应用程序中处理横切关注点?

C# 如何在ASP.NET MVC 3应用程序中处理横切关注点?,c#,.net,asp.net-mvc,aop,cross-cutting-concerns,C#,.net,Asp.net Mvc,Aop,Cross Cutting Concerns,我有一个ASP.NET MVC 3 web应用程序,具有各种组件/层,例如: 网 服务(缓存、外部API、云服务等) 核心(域逻辑、POCO等) 存储库(实体框架) 现在,当我在我的网站上做一些事情时(例如提交一个表单,又称帖子)——在最坏的情况下,可能需要通知所有层 现在,我可以将所有这些逻辑构建到我的控制器HTTP POST操作中,但它在逻辑上变得非常繁重 我曾尝试过使用发布者订户模式(AOP),但到目前为止,我还没有找到一个非常好的.NET实现,而且有人告诉我,这对于web应用程序来说不是

我有一个ASP.NET MVC 3 web应用程序,具有各种组件/层,例如:

  • 服务(缓存、外部API、云服务等)
  • 核心(域逻辑、POCO等)
  • 存储库(实体框架)
  • 现在,当我在我的网站上做一些事情时(例如提交一个表单,又称帖子)——在最坏的情况下,可能需要通知所有层

    现在,我可以将所有这些逻辑构建到我的控制器HTTP POST操作中,但它在逻辑上变得非常繁重

    我曾尝试过使用发布者订户模式(AOP),但到目前为止,我还没有找到一个非常好的.NET实现,而且有人告诉我,这对于web应用程序来说不是一个好的实践

    这里有人能给我一些建议吗,或者我被这样的代码困住了:

    [HttpPost]
    public ActionResult Do(Something model)
    {
        _repository.Save(model); // this should be the only line IMO
        _service.DoSomething();
        _repository.DoSomethingElse();
        _domain.DoSomethingMore();
    }
    

    这里我不是说多线程或其他什么,只是简单地把控制器上的责任卸下来,放在关心这些操作的组件上。

    如果您还没有完全放弃PubSub,您可以看看RabbitMQ。


    我不明白为什么它不是web应用程序的“最佳实践”,这些绝对值很少是正确的。

    一个好的PubSub脚本是基于Node.js构建的。它真的很好,可以用于您的案例

    Faye是一个基于Bayeux协议的发布-订阅消息系统。它为Node.jsRuby提供消息服务器,并为服务器和所有主要web浏览器提供客户端


    我想尽量远离“外部”服务。因为工作是在后台执行的,超出了主请求线程的范围。