【问题标题】:How to handle cross-cutting concerns in an ASP.NET MVC 3 Application?如何处理 ASP.NET MVC 3 应用程序中的横切关注点?
【发布时间】:2012-10-12 02:53:03
【问题描述】:

我有一个 ASP.NET MVC 3 Web 应用程序,其中包含各种组件/层,例如:

  1. 网络
  2. 服务(缓存、外部 API、云服务等)
  3. 核心(域逻辑、POCO 等)
  4. 存储库(实体框架)

现在,当我在我的网站上做某事时(例如提交表单,也就是 POST)——在最坏的情况下,可能需要通知所有层。

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

我已经尝试过使用发布者-订阅者模式 (AOP),但我还没有找到一个非常好的 .NET 实现,而且我也有人告诉我这对网络来说不是一个好习惯应用程序。

任何人都可以在这里给我任何建议,还是我被这样的代码卡住了:

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

我在这里不是在谈论多线程或任何东西,而是简单地将责任从控制器上移开,并将其放在关心这些操作的组件上。

【问题讨论】:

    标签: c# .net asp.net-mvc aop cross-cutting-concerns


    【解决方案1】:

    一个好的 PubSub 脚本是 Faye,它是基于 Node.js 构建的。真的很好,可以用于你的情况。

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

    【讨论】:

      【解决方案2】:

      如果您还没有完全放弃 PubSub,可以看看 RabbitMQ。 http://www.rabbitmq.com/

      我不明白为什么它不是 Web 应用程序的“最佳实践”,无论如何,这些绝对原则很少是正确的。

      【讨论】:

      • 我想尝试远离“外部”服务。因为那时工作是在后台执行的,超出了主请求线程的范围。
      猜你喜欢
      • 2018-12-28
      • 2011-04-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多