route - ¿Cómo controlar la segregación de responsabilidad de consulta(CQRS) con ASP.NET MVC?
tag helper asp net core 2 (5)
Aquí hay un ejemplo completo que escribí para mi Scrum de lib de CQRS :
- Example.Domain : implementación del dominio
- Example.Specs : especificaciones de comportamiento del dominio utilizando MSpec
- Example.Web : aplicación web MVC de ejemplo (demostración en http://scritchyExample.apphb.com )
- Example.SignalR : Ejemplo de aplicación web html / Javascript / SignalR (usando el mismo código de dominio)
Crear su aplicación CQRS utilizando el paquete Nuke Scritchy es bastante sencillo y lo pone en marcha en unos minutos
He estado leyendo sobre la segregación de responsabilidad de consulta de comando (CQRS) . Me pregunto cómo funcionaría esto con ASP.NET MVC. Me da la idea de CQRS conceptualmente suena bien y seguro que introduce algunas complejidades (patrón de eventos y mensajes) en comparación con el enfoque "normal / común". También la idea de CQRS es de alguna manera contraria al uso de ORM. Estoy tratando de pensar cómo podría usar este patrón en los próximos proyectos, así que si alguien tiene experiencia en combinar CQRS con ASP.NET MVC y NHibernate, por favor brinde ejemplos concretos que me ayuden a comprender mejor CQRS y utilizar con ASP.NET MVC. ¡Gracias!
Actualizado: He estado revisando el código de muestra de Mark. Es una lectura obligada si estás 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-trying-to-make-it-re-usable/
Cqrs hace que el proyecto web sea mucho más fácil. En el sitio get, todas las consultas se verán como "select * from table where id = @id"). Para esas consultas simples, no necesitará un orm como NHiberante. No tiene que usar una base de datos sql, y cuando lo desee, puede serializar su objeto a la tabla de la base de datos, o usar una convención de nomenclatura. Todavía puede consultar la base de datos leída por NHibernate, pero no obtendrá ninguna ventaja de ella, porque todas sus consultas serán las mismas.
public class Controller
{
public ActionResult Get(Guid id)
{
var viewModel = reportingDatabase.Get(id);
return View(viewmodel);
}
}
En el lado del comando, los controladores se verán así:
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 solo envía un mensaje y no sabe a dónde va el mensaje y cuál es el resultado del mensaje. La parte de mvc de esto es muy simple de programar. Cqrs hará que escribir la parte web de la aplicación sea muy aburrido, pero puede hacerlo más divertido agregando algún código que ayude al usuario a tomar decisiones (opcionalmente, devolver json utilizado por ajax).
En la siguiente publicación puede encontrar recursos interesantes: Cómo adaptar CQRS a los proyectos
El que encontré particularmente interesante es el viaje CQRS , de Microsoft. Puede parecer decepcionante por su dependencia con Windows Azure, pero espere ... Tiene una muy buena implementación de un Event Store y Enterprise Service Bus en SQL Server. Encontrará muchos comentarios en el código fuente de la aplicación Demo que le advierte sobre el uso de la implementación de SQL en producción ... pero con algunos ajustes puede adaptarlo a su proyecto. Lo hice, y funciona muy, muy bien.
El código está limpio (es de los chicos de Microsoft Patterns y prácticas). Encontrará un buen ejemplo de cómo usar la inyección de dependencia (con Unity), un Enterprise Service Bus simple (con SQL Server y ADO.NET, con subprocesos paralelos), un modelo de lectura con Entity Framework y mucho más. Aprendí de él cómo hacer CQRS y Event Sourcing ... Recuerde: todo se trata de eventos
Por favor, eche un vistazo a mi proyecto DDDsample.Net en CodePlex. La GUI se implementa utilizando ASP.NET MVC mientras que la lógica empresarial que utiliza DDD se basa en 4 variantes diferentes:
- clásico (sin CQRS)
- CQRS con dos tiendas de datos relacionales NHIbernate
- CQRS con LINQ a SQL en el lado de los informes
- CQRS con Event Sourcing en el lado del comando
Y eche un vistazo a mi intento de http://agrcqrs.codeplex.com , que es ASP.NET MVC + NHibernate