Domanda

Ho letto su Responsabilità Comando Query segregazione (CQRS) . I sorta di chiedo come sarebbe questo lavoro con ASP.NET MVC? Ho l'idea di CQRS concettualmente sembra bello e sicuro che lo fa introdurre alcune complessità (evento e modello di messaggistica) rispetto all'approccio "normale / comune". Anche l'idea di CQRS sorta di contro l'uso di ORM in qualche modo. Sto cercando di pensare a come avrei potuto utilizzare questo modello nei prossimi progetti quindi se qualcuno ha esperienza nel combinare CQRS con ASP.NET MVC e NHibernate si prega di fornire alcuni esempi concreti per aiutare a capire meglio CQRS e l'utilizzo con ASP.NET MVC. Grazie!

Aggiornamento: Vado attraverso il codice di esempio di Mark. E 'un must leggere se si sta imparando CQRS.

http://github.com/MarkNijhof/Fohjin

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

http: // cre8ivethought .com / blog / 2009/11/28 / cqrs-cercare-per-fare-da-riutilizzabili /

È stato utile?

Soluzione

Cqrs rende il progetto web molto più facile. Sul sito get, tutte le query sarà simile "Select * from tabella in cui id = @ id"). Per queste semplici domande, non avrete bisogno di un ORM come NHiberante. Non è necessario utilizzare un database SQL, e quando si vuole, è possibile serializzare l'oggetto alla tabella di database, o utilizzare una convenzione di denominazione. È ancora possibile interrogare il database di lettura da NHibernate, ma non sarà possibile ottenere alcun vantaggio da esso, perché tutte le vostre domande saranno gli stessi.

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

Dal punto di vista dei comandi, i controllori sarà simile a questo:

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

Il controller è sufficiente inviare un messaggio, e non sa dove va il messaggio e quali il risultato del messaggio è. La parte MVC di questo è molto semplice da programmare. Cqrs renderanno la scrittura web-parte della domanda molto noioso, ma è possibile renderlo più divertente con l'aggiunta di un po 'di codice che aiuta l'utente a prendere decisioni (opzionalmente ritorno JSON utilizzato da ajax).

Altri suggerimenti

Si prega di dare un'occhiata al mio DDDsample.Net progetto su CodePlex. L'interfaccia grafica è implementata utilizzando ASP.NET MVC, mentre la logica di business utilizzando pratiche DDD in 4 varianti differenti:

  • classico (senza CQRS)
  • CQRS con due archivi di dati relazionali NHibernate
  • CQRS con LINQ to SQL sul lato del rapporto
  • CQRS con Sourcing evento sul lato comando

E dare un'occhiata al mio tentativo di http://agrcqrs.codeplex.com , che è ASP .NET MVC + NHibernate

Ecco un esempio completo che ho scritto per miei CQRS lib Scritchy :

  • Example.Domain : implementazione di dominio
  • Example.Specs : specifiche di comportamento dominio utilizzando MSpec
  • Example.Web : Esempio MVC web app (demo a < a href = "http://scritchyExample.apphb.com" rel = "nofollow"> http://scritchyExample.apphb.com )
  • Example.SignalR : Esempio HTML / JavaScript / SignalR web app (utilizzando lo stesso codice dominio)

Creare la vostra applicazione CQRS utilizzando il pacchetto NuGet Scritchy è piuttosto semplice e installato e funzionante ottiene in pochi minuti

Nel seguente post si possono trovare risorse interessanti: come adattare CQRS a progetti

Quello che ho trovato particolarmente interessante è la CQRS Viaggio , da Microsoft. Può sembrare deludente per la sua dipendenza con Windows Azure, ma aspetta ... Ha una bella realizzazione di un evento di archivio e Enterprise Service Bus in SQL Server. Troverete un sacco di commenti nel codice sorgente Demo App che mette in guardia contro usando l'implementazione di SQL nella produzione ... ma con un paio di modifiche è possibile adattarlo al vostro progetto. L'ho fatto, e funziona molto, molto bene.

Il codice è pulito (è da ragazzi di Microsoft Patterns e pratiche). Troverete un buon esempio di come utilizzare l'iniezione di dipendenza (con Unity), un semplice ma efficace Enterprise Service Bus (con SQL Server e ADO.NET, con thread paralleli), un modello di lettura con Entity Framework e molto di più. Ho imparato da lui come fare CQRS e Sourcing evento ... Ricorda: Tutti i suoi circa Eventi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top