Frage

Ich habe gelesen über Command Query Verantwortung Segregations (CQRS) . Ich Art von frage mich, wie würde diese Arbeit mit ASP.NET MVC? Ich bekomme die Idee CQRS konzeptionell klingt es schön und sicher, einige Komplexität einführt (Event- und Messaging-Muster) im Vergleich zu den „normalen / common“ -Ansatz. Auch die Idee der CQRS Art gegen den Einsatz von ORM in gewisser Weise. Ich versuche zu denken, wie ich dieses Muster in den kommenden Projekte nutzen könnten also wenn jemand Erfahrung in Kombination CQRS mit ASP.NET MVC und NHibernate hat Sie einige konkrete Beispiele geben, mir zu helfen besser CQRS zu verstehen und mit ASP.NET MVC verwenden. Dank!

Aktualisiert: Ich habe durch Mark Beispielcode gegangen. Es ist ein muss lesen, wenn Sie CQRS lernen.

http://github.com/MarkNijhof/Fohjin

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

http: // cre8ivethought .com / blog / 2009/11/28 / cqrs-versuchen-to-make-it-wiederverwendbare /

War es hilfreich?

Lösung

Cqrs macht das Web-Projekt viel einfacher. Auf der Website erhalten, werden alle die Abfragen aussehen "Select * from table where id = @id"). Für die einfachen Abfragen, werden Sie nicht ein ORM wie NHiberante benötigen. Sie müssen nicht eine SQL-Datenbank verwenden, und wenn Sie werden Sie Ihr Objekt in die Datenbanktabelle serialisiert werden können, oder eine Namenskonvention verwenden. Sie können immer noch die Lese Datenbank von NHibernate abfragen, aber Sie werden keinen Vorteil daraus nicht bekommen, weil alle Ihre Anfragen werden die gleichen sein.

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

Auf der Kommando Seite, die Controller werden wie folgt aussehen:

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

Der Controller nur eine Nachricht senden, und es nicht weiß, wo die Nachricht an und was ist das Ergebnis der Nachricht geht. Der mvc Teil davon ist sehr einfach zu programmieren. Cqrs wird der Web-Teil der Anwendung sehr langweilig machen zu schreiben, aber man kann es mehr Spaß machen, indem einige Codes hinzufügen, die die Benutzer Entscheidungen treffen helfen (optional json von Ajax verwendet Rückkehr).

Andere Tipps

Bitte werfen Sie einen Blick auf meine DDDsample.Net Projekt auf CodePlex. Die GUI wird mit ASP.NET MVC implementiert, während die Business-Logik Praktiken mit DDD in 4 verschiedenen Varianten:

  • classic (kein CQRS)
  • CQRS mit zwei nHibernate relationalen Datenspeicher
  • CQRS mit LINQ to SQL auf Berichtsseite
  • CQRS mit Ereignis-Sourcing auf Befehl Seite

Und werfen Sie einen Blick auf meinem Versuch http://agrcqrs.codeplex.com , das ist ASP .NET MVC + NHibernate

Hier ist ein vollständiges Beispiel I für meine CQRS lib Scritchy :

  • Example.Domain : Domain Implementierung
  • Example.Specs : Domain Verhalten specs mit MSpec
  • Example.Web : Beispiel MVC Web-App (Demo in < a href = "http://scritchyExample.apphb.com" rel = "nofollow"> http://scritchyExample.apphb.com )
  • Example.SignalR : Beispiel html / Javascript / SignalR Web-App (mit dem gleichen Domain-Code)

Erstellen Sie Ihre CQRS App der Scritchy nuget Paket mit ziemlich einfach ist und bekommt man und in ein paar Minuten laufen

Im folgenden Beitrag können Sie interessante Ressourcen finden: Wie anzupassen CQRS Projekte

Die eine, die ich besonders interessant fand, ist die CQRS Journey von Microsoft. Es kann für die Abhängigkeit mit Windows Azure enttäuschend aussehen, aber warten Sie ... Es hat eine sehr schöne Umsetzung eines Event-Store und Enterprise Service Bus in SQL Server. Sie werden eine Menge Kommentare in der Demo-App-Quellcode, die Sie gegen die Verwendung der SQL-Implementierung in der Produktion ... aber mit ein paar Veränderungen warnt können Sie es zu einem Projekt anzupassen. Ich habe es getan, und es funktioniert sehr, sehr gut.

Der Code ist sauber (es ist von den Jungs von Microsoft Patterns and practices). Sie werden ein gutes Beispiel zu finden, wie Dependency Injection zu verwenden (mit Unity), eine einfache, aber effektive Enterprise Service Bus (mit SQL Server und ADO.NET, mit parallelen Threads), einem Lese Modell mit Entity Framework und vieles mehr. Ich lernte von ihm, wie CQRS und Event-Sourcing zu tun ... Denken Sie daran: Es ist alles über Veranstaltungen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top