Question

Je suis en train de lire sur le Commande requête Responsabilité Ségrégation (CQRS) . Je me demande comment genre de travail avec ce serait ASP.NET MVC? Je reçois l'idée de CQRS sur le plan conceptuel, il sonne bien et ne vous présenter quelques complexités (événement et modèle de messagerie) par rapport à l'approche « normale / commune ». Aussi l'idée de CQRS sorte contre l'utilisation de ORM à certains égards. Je suis en train de penser comment je pourrais utiliser ce modèle dans les projets à venir, donc si quelqu'un a une expérience dans la combinaison CQRS avec ASP.NET MVC et NHibernate s'il vous plaît donner quelques exemples concrets pour me aider à mieux comprendre et utiliser CQRS avec ASP.NET MVC. Merci!

Mise à jour: J'ai été en passant par le code de l'échantillon de Mark. Il est un incontournable si vous apprenez CQRS.

http://github.com/MarkNijhof/Fohjin

http://cre8ivethought.com/blog/ 2009/11/12 / CQRS - la-greg-jeunes /

http: // cre8ivethought .com / blog / 2009/11/28 / CQRS-essayant-make-it-réutilisables /

Était-ce utile?

La solution

CQRS rend le projet web beaucoup plus facile. Sur le site get, toutes les requêtes ressembleront "Select * from table où id = @id"). Pour les requêtes simples, vous aurez pas besoin d'un ORM comme NHiberante. Vous ne devez pas utiliser une base de données SQL, et quand vous, vous pouvez sérialiser votre objet à la table de base de données ou utiliser une convention de nommage. Vous pouvez toujours interroger la base de données de lecture par NHibernate, mais vous n'obtiendrez aucun avantage, parce que toutes vos requêtes seront les mêmes.

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

Du côté de la commande, les contrôleurs ressemblera à ceci:

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

Le contrôleur juste envoyer un message, et il ne sait pas où le message va et ce que le résultat du message est. La partie mvc de c'est très simple à programmer. CQRS fera écrire la partie web de l'application très ennuyeux, mais vous pouvez le rendre plus amusant en ajoutant un code qui permet à l'utilisateur de prendre des décisions (le cas échéant le retour JSON utilisé par ajax).

Autres conseils

S'il vous plaît jeter un oeil à mon DDDsample.Net projet sur CodePlex. L'interface graphique est implémenté en utilisant ASP.NET MVC alors que la logique métier en utilisant des pratiques DDD en 4 différentes variantes:

  • classique (pas CQRS)
  • CQRS avec deux magasins de données relationnelles NHibernate
  • CQRS avec LINQ to SQL sur le côté de l'information
  • CQRS avec l'approvisionnement de l'événement sur le côté de commande

Et jeter un oeil à ma tentative de http://agrcqrs.codeplex.com , qui est ASP .NET MVC + NHibernate

Voici un exemple complet j'ai écrit pour mes CQRS lib Scritchy :

  • Example.Domain : la mise en œuvre de domaine
  • Example.Specs : spécifications de comportement de domaine en utilisant MSpec
  • Example.Web : application web Exemple MVC (démonstration à < a href = "http://scritchyExample.apphb.com" rel = "nofollow"> http://scritchyExample.apphb.com )
  • Example.SignalR : Exemple html / Javascript / SignalR application web (en utilisant le même code de domaine)

Création de votre application CQRS en utilisant le paquet NuGet Scritchy est assez simple et vous permet d'être opérationnel en quelques minutes

Dans le post suivant, vous pouvez trouver des ressources intéressantes: Comment adapter CQRS à des projets

Celui que je trouve particulièrement intéressant est le CQRS Journey , de Microsoft. Il peut sembler décevant pour sa dépendance avec Windows Azure, mais attendez ... Il a une très belle mise en œuvre d'un service de banque d'événements et Enterprise Bus dans SQL Server. Vous trouverez beaucoup de commentaires dans le code source App démo qui vous met en garde contre l'utilisation de l'implémentation SQL dans la production ... mais avec quelques modifications, vous pouvez l'adapter à votre projet. Je l'ai fait, et il fonctionne très, très bien.

Le code est propre (il est des gars de Microsoft modèles et pratiques). Vous trouverez un bon exemple de la façon d'utiliser l'injection de dépendance (avec l'unité), un simple mais efficace Enterprise Service Bus (avec SQL Server et ADO.NET, avec des fils parallèles), un modèle de lecture avec Entity Framework et beaucoup plus. J'ai appris de lui comment faire CQRS et l'approvisionnement de l'événement ... Rappelez-vous: Its all about événements

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top