Я читал о Сегрегации ответственности за запрос команды (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/
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).
Пожалуйста, взгляните на мой DDDsample.Net проект на CodePlex. Графический интерфейс реализован с помощью ASP. NET MVC, а бизнес-логика с использованием DDD-практики в 4 различных вариантах:
И посмотрите на мою попытку http://agrcqrs.codeplex.com, которая представляет собой ASP.NET MVC + NHibernate