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 :

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 :

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; } }
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 :
www.dddcqrs.com par Greg Young
le projet framework nCQRS