Как справиться со сквозными проблемами в приложении ASP.NET MVC 3?

У меня есть веб-приложение ASP.NET MVC 3 с различными компонентами/слоями, такими как:

  1. Интернет
  2. Сервисы (кеш, внешние API, облачные сервисы и т. д.)
  3. Ядро (логика домена, POCO и т. д.)
  4. Репозиторий (Entity Framework)

Теперь, когда я что-то делаю на своем веб-сайте (например, отправляю форму, также известную как POST), в худшем случае может потребоваться уведомление всех слоев.

Теперь я мог бы встроить всю эту логику в действие HTTP POST моего контроллера, но логика становится очень толстой и весомой.

Я пробовал использовать шаблон Publisher-Subscriber (AOP), но пока не нашел очень хорошей реализации .NET, и мне также говорили, что это не очень хорошая практика для веб-приложений.

Может ли кто-нибудь дать мне какой-либо совет здесь, или я застрял с таким кодом:

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

Я не говорю о многопоточности или чем-то еще, а просто снимаю ответственность с контроллера и перекладываю ее на компоненты, которые заботятся об этих действиях.


person RPM1984    schedule 12.10.2012    source источник


Ответы (2)


Одним из хороших сценариев PubSub будет Faye, т.е. построен на Node.js. Это действительно хорошо и может быть использовано для вашего случая.

Faye – это система обмена сообщениями с публикацией и подпиской, основанная на протоколе Bayeux. Он предоставляет серверы сообщений для Node.js и Ruby, а также клиенты для использования на сервере и во всех основных веб-браузерах.

person vasanth kumar    schedule 12.10.2012

Если вы еще не полностью отказались от PubSub, вы можете взглянуть на RabbitMQ. http://www.rabbitmq.com/

Я не понимаю, почему это не «лучшая практика» для веб-приложений, в любом случае такие абсолюты редко бывают правильными.

person Dharun    schedule 12.10.2012
comment
Я хотел попытаться держаться подальше от внешних сервисов. Потому что тогда работа выполняется в фоновом режиме и выходит за рамки основного потока запросов. - person RPM1984; 12.10.2012