Publié par : yoannr | 1 novembre 2011

Introduction à CQRS/ES


CQRS est un acronyme pour Command Query Responsibility Segregation.C’est à dire la séparation de  responsabilité des commandes et des query. Le principe est très simple et peut être enonce comme : Poser une question ne doit pas changer la réponse.  

Voici à quoi ressemble une application classique :
application classique

Le domaine va  devoir gérer aussi bien l’entrée d’information que la sortie. Or comme vous le savez, les requêtes de sorties sont souvent quelque chose de compliqué. Assez souvent on a besoin d’utiliser et de créer des objects qui ne serviront qu’a un usage bien particulier. Or le domaine doit gérer ces particularismes et les intégrer dans ses pérégrinations.

C’est la qu’intervient CQRS, en séparant les commandes des query on arrive a un schema plus simple car bien delimite :
Command sous CQRS

Le client envoie une commande (l’équivalent du DTO du schema classique) à l’application. Cette command correspond a un fonction void. Si je prends l’exemple d’une application twitter, on pourrait avoir une comand comme ceci :

 public class PostNewTweetCommand : CommandBase
    {
        public string Message { get; set; }
        public string Who { get; set; }
    }
L’application reçoit cette Command et sait la traiter. En fonction des règles de validation et de disponibilité de l’infrastructure (réseau, ..) on peut imaginer que cette action sera un succès ou entraînera une exception. Au client de gérer cet état de fait.
Le cote query est quant à lui gérer séparement via une interface très légère qui s’occupe d’optimiser les query.

CQRS coté query

La database est attaquée directement par la couche mince d’accès aux données comme par exemple linq2sql ou  autre chose d’encore plus léger, et permet ainsi une optimisation des query sans alourdir le cote command.

Credits pour les exemples et les images :

http://www.dddcqrs.com par Greg Young

le projet framework nCQRS


Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Catégories

%d blogueurs aiment cette page :