33 votes

Comment commander la séparation des responsabilités de requête (CQRS) avec ASP.NET MVC?

J'ai lu sur Commande de Requête de la Responsabilité de la Ségrégation (CQRS). Je me demande comment serait-ce de travailler avec ASP.NET MVC? J'ai eu l'idée de CQRS sur le plan conceptuel, il sonne bien et assurez-vous introduit des complexités (cas et modèle de messagerie) par rapport à la "normal/commune" approche . Aussi l'idée de CQRS sorte de contre l'utilisation de l'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 de l'expérience dans la combinaison de CQRS avec ASP.NET MVC et NHibernate veuillez donner des exemples concrets pour m'aider à mieux comprendre CQRS et de l'utiliser avec ASP.NET MVC. Merci!

Mise à jour: J'ai été en passant par Marquer un exemple de code. C'est à lire absolument si vous êtes de l'apprentissage 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/

25voto

Szymon Pobiega Points 2207

S'il vous plaît jeter un oeil à mon projet DDDsample.Net sur CodePlex. L'interface graphique est implémentée à l'aide d'ASP.NET MVC tandis que la logique applicative utilisant DDD utilise 4 variantes différentes:

  • classique (pas de CQRS)
  • CQRS avec deux magasins de données relationnelles NHIbernate
  • CQRS avec LINQ to SQL du côté du reporting
  • CQRS avec Event Sourcing côté commande

18voto

Paco Points 6156

Cqrs rend le projet d'autant plus facile. Sur le site, toutes les requêtes ressemblera "select * from table where id = @id"). Pour ceux requêtes simples, vous n'aurez pas besoin d'un orm comme NHiberante. Vous n'avez pas à utiliser une base de données sql, et quand vous voulez, vous pouvez sérialiser votre objet dans la table de base de données, ou d'utiliser une convention de nommage. Vous pouvez toujours interroger la lecture de la base de données par NHibernate, mais vous n'obtiendrez pas un avantage, parce que toutes vos questions seront les mêmes.

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

Sur la commande côté, les contrôleurs ressembler à 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 envoie un message, et il ne sait pas où le message passe et quel est le résultat de la message. Le mvc partie de cela est très simple à programmer. Cqrs fera de l'écriture sur le web-partie de la demande, très ennuyeux, mais vous pouvez faire plus de plaisir en ajoutant un peu de code qui permet à l'utilisateur de prendre des décisions (éventuellement le retour json utilisé par ajax).

4voto

Jan Willem B Points 2702

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

0voto

Tom Points 378

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

La création de votre CQRS application à l'aide de la Scritchy package nuget est assez simple et vous remet dans quelques minutes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X