Как к Сегрегации ответственности за запрос команды (CQRS) с ASP.NET MVC?

Я читал о Сегрегации ответственности за запрос команды (CQRS). Я сортирую удивления, как это работало бы с ASP.NET MVC? Я получаю идею CQRS концептуально, это звучит хорошим, и уверенный действительно представляет некоторые сложности (событие и обменивающийся сообщениями шаблон) по сравнению с "нормальным/распространенным" подходом. Также идея вида CQRS против использования ORM до некоторой степени. Я пытаюсь думать, как я мог использовать этот шаблон в ближайших проектах поэтому, если у кого-либо есть опыт в объединении CQRS с ASP.NET MVC и NHibernate, дайте некоторые конкретные примеры, чтобы помочь мне лучше понять CQRS и использование с ASP.NET MVC.Спасибо!

Обновленный: я проходил пример кода Mark's. Это - необходимость, читал, если Вы изучаете CQRS.

http://github.com/MarkNijhof/Fohjin

http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young/

http://cre8ivethought.com/blog/2009/11/28/cqrs-trying-to-make-it-re-usable/

33
задан Marijn 18 July 2012 в 07:09
поделиться

3 ответа

Cqrs значительно упрощает веб-проект. На сайте получения все запросы будут иметь вид «выберите * из таблицы, где id = @id»). Для этих простых запросов вам не понадобится орм вроде NHiberante. Вам не обязательно использовать базу данных sql, и когда вы это сделаете, вы можете сериализовать свой объект в таблицу базы данных или использовать соглашение об именах.Вы по-прежнему можете запрашивать базу данных чтения с помощью NHibernate, но вы не получите от этого никаких преимуществ, потому что все ваши запросы будут одинаковыми.

public class Controller
{
  public ActionResult Get(Guid id)
  {
     var viewModel = reportingDatabase.Get(id);
     return View(viewmodel);
  }
}

На стороне команды контроллеры будут выглядеть следующим образом:

public class Controller
{
  public ActionResult Post(SomeForm form)
  {
    // do validation
    var command = new SomeCommand(form.Property1, form.Property2);
    bus.Send(command);
    return redirecto(something else);
  }
}

Контроллер просто отправляет сообщение, и он не знает, куда оно отправляется и каков результат сообщения. Компонент mvc очень прост в программировании. Cqrs сделает написание веб-части приложения очень утомительным, но вы можете сделать его более интересным, добавив некоторый код, который помогает пользователю принимать решения (необязательно возвращая json, используемый ajax).

18
ответ дан 27 November 2019 в 18:30
поделиться

Пожалуйста, взгляните на мой DDDsample.Net проект на CodePlex. Графический интерфейс реализован с помощью ASP. NET MVC, а бизнес-логика с использованием DDD-практики в 4 различных вариантах:

  • классический (без CQRS)
  • CQRS с двумя реляционными хранилищами данных NHIbernate
  • CQRS с LINQ to SQL на стороне отчетов
  • CQRS с Event Sourcing на стороне команд
25
ответ дан 27 November 2019 в 18:30
поделиться

И посмотрите на мою попытку http://agrcqrs.codeplex.com, которая представляет собой ASP.NET MVC + NHibernate

4
ответ дан 27 November 2019 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: