Pergunta

Eu tenho lido sobre comando de consulta Responsabilidade Segregação (CQRS) . Eu meio que admira como é que este trabalho com ASP.NET MVC? Tenho a ideia de CQRS conceitualmente soa agradável e com certeza não introduzir algumas complexidades (mensagens padrão do evento e) em comparação com a abordagem "/ common normal". Também a idéia de CQRS tipo de contra o uso de ORM em alguns aspectos. Estou tentando pensar em como eu poderia usar este padrão nos próximos projectos por isso, se alguém tem experiência em combinar CQRS com ASP.NET MVC e NHibernate por favor dar alguns exemplos concretos para me ajudar a entender melhor CQRS e uso com ASP.NET MVC. Obrigado!

Atualizado: Eu estive passando por código de exemplo de Marcos. É uma leitura obrigatória se você está aprendendo 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-tentando-se make-it-reutilizável /

Foi útil?

Solução

Cqrs torna o projeto web muito mais fácil. No site get, todas as consultas será semelhante "Select * from tabela onde id = @ id"). Para essas consultas simples, você não vai precisar de um ORM como NHiberante. Você não tem que usar um banco de dados SQL, e quando você vai, você pode serializar o objeto para a tabela de banco de dados ou usar uma convenção de nomenclatura. Você ainda pode consultar o banco de dados lido pelo NHibernate, mas você não vai obter qualquer vantagem a partir dele, porque todas as suas consultas será o mesmo.

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

No lado do comando, os controladores será parecido com este:

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

O controlador basta enviar uma mensagem, e não sabe para onde a mensagem vai para eo que o resultado da mensagem é. A parte MVC disso é muito simples de programa. Cqrs fará escrever a parte de aba do aplicativo muito chato, mas você pode torná-lo mais divertido, adicionando algum código que ajuda as decisões de usuário Marca (opcionalmente retornar JSON usada por Ajax).

Outras dicas

Por favor, dê uma olhada no meu DDDsample.Net projeto no CodePlex. A GUI é implementada usando ASP.NET MVC, enquanto a lógica de negócios usando práticas DDD em 4 variantes diferentes:

  • clássico (sem CQRS)
  • CQRS com dois armazenamentos de dados relacional Hibernate
  • CQRS com LINQ to SQL no lado relatórios
  • CQRS com Fornecimento de evento do lado de comando

E dar uma olhada em minha tentativa em http://agrcqrs.codeplex.com , que é ASP .NET MVC + NHibernate

Aqui está um exemplo completo que escrevi para minha CQRS lib Scritchy :

  • Example.Domain : aplicação Domínio
  • Example.Specs : comportamento especificações de domínio usando MSpec
  • Example.Web : Exemplo MVC web app (demo em < a href = "http://scritchyExample.apphb.com" rel = "nofollow"> http://scritchyExample.apphb.com )
  • Example.SignalR : Exemplo html / JavaScript / SignalR aplicativo web (usando o mesmo código de domínio)

Criando seus CQRS aplicativo usando o Scritchy NuGet empacotar é bastante simples e você fica instalado e funcionando em poucos minutos

scroll top