Pregunta

He estado leyendo sobre Responsabilidad comando de consulta de reparto (CQRS) . En cierto modo me pregunto cómo funcionaría esto con ASP.NET MVC? Me da la idea de CQRS conceptualmente suena agradable y segura de sí introduce cierto grado de complejidad (evento y patrón de mensajería) en comparación con el enfoque "normal / común". También la idea de CQRS especie de contra el uso de ORM en algunos aspectos. Estoy tratando de pensar cómo podría utilizar este modelo en los próximos proyectos de modo que si alguien tiene experiencia en la combinación CQRS con ASP.NET MVC y NHibernate favor dar algunos ejemplos concretos que me ayudan a entender mejor CQRS y utilizar con ASP.NET MVC. Gracias!

Actualizado: He estado yendo a través de código de ejemplo de Mark. Es una lectura obligada si usted está aprendiendo 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-intentar-a-hacer-él-reutilizable /

¿Fue útil?

Solución

CQRS hace que el proyecto web mucho más fácil. En el sitio conseguirá, todas las consultas que parecerán "Seleccionar * de la tabla donde id = @ id"). Para aquellas consultas simples, usted no necesitará un ORM como NHiberante. Usted no tiene que utilizar una base de datos SQL, y cuando se quiere, se puede serializar el objeto en la tabla de base de datos, o utilizar una convención de nomenclatura. Todavía se puede consultar la base de datos de lectura por NHibernate, pero no obtendrá ninguna ventaja de que, debido a todas sus consultas serán los mismos.

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

En el lado de comandos, los controladores van a tener este aspecto:

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);
  }
}

El controlador basta con enviar un mensaje, y no sabe dónde está el mensaje va a y lo que el resultado del mensaje es. La parte de esta MVC es muy fácil de programar. CQRS harán escribir la web parte de la aplicación muy aburrido, pero se puede hacer que sea más divertido mediante la adición de un código que ayuda al usuario a tomar decisiones (opcionalmente volver JSON utilizado por Ajax).

Otros consejos

Por favor, eche un vistazo a mi DDDsample.Net proyecto en CodePlex. La GUI se implementa utilizando ASP.NET MVC mientras que la lógica de negocio utilizando prácticas DDD en 4 variantes diferentes:

  • clásico (sin CQRS)
  • CQRS con dos almacenes de datos relacional Nhibernate
  • CQRS con LINQ to SQL en el lado de informes
  • CQRS con evento de abastecimiento en el lado de comandos

Y echar un vistazo a mi intento de http://agrcqrs.codeplex.com , que es ASP .NET MVC + NHibernate

Aquí es un ejemplo completo que escribí para mis CQRS lib Scritchy :

  • Example.Domain : implementación de dominio
  • Example.Specs : dominio de las especificaciones de comportamiento utilizando MSpec
  • Example.Web : aplicación web Ejemplo MVC (demo a < a href = "http://scritchyExample.apphb.com" rel = "nofollow"> http://scritchyExample.apphb.com )
  • Example.SignalR : aplicación web Ejemplo html / Javascript / SignalR (utilizando el mismo código de dominio)

La creación de su aplicación CQRS usando el paquete Nuget Scritchy es bastante sencillo y que se pone en marcha y funcionando en pocos minutos

En el siguiente post se puede encontrar recursos interesantes: cómo adaptar CQRS a proyectos

El que encontré particularmente interesante es la CQRS viaje , de Microsoft. Puede parecer decepcionante para su dependencia con Windows Azure, pero espera ... Tiene una muy buena aplicación de una tienda de eventos y Enterprise Service Bus en SQL Server. Usted encontrará una gran cantidad de comentarios en el código fuente de la aplicación de demostración que le advierte contra el uso de la aplicación SQL en la producción ... pero con algunos retoques se puede adaptar a su proyecto. Lo hice, y funciona muy, muy bien.

El código es limpio (que es de los chicos de patrones y prácticas de Microsoft). Se encuentra un buen ejemplo de cómo utilizar la inyección de dependencias (con Unity), un simple pero eficaz Enterprise Service Bus (con SQL Server y ADO.NET, con hilos paralelos), un modelo de lectura con Entity Framework y mucho más. Aprendí de él cómo hacer CQRS y Abastecimiento de eventos ... Recuerde: Todo es cuestión de Eventos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top