A l’heure du Cloud, le CQRS est un des patterns absolument connaître.
Le Command Query Responsibility Segregation est un pattern simple qui dissocie les opérations d’écritures des opérations de lecture.
Fondamentalement parlant, le CQRS est un pattern qui dissocie les opérations de commandes (les opérations d’écritures) des opérations d’interrogation (les lectures). Ainsi codé, par un système d’évènement et de synchronisation optimiste des locks, on peut gagner énormément en throughput car on limite les opérations de verrouillage (lock) dans le système sous-jacent (souvent une base de données).
Conceptuellement parlant, le CQRS repose sur une logique où la donnée qu’on manipule existe sous 2 visions. Une vision informative, d’affichage, de requête, qui ne reflète pas forcément le réel (par exemple, le nombre de places disponibles dans un théâtre) et une vision de commande, de transaction, d’écriture, qui exige de travailler avec des données réelles (le moment où l’on réserve vraiment)
Le CQRS prend tout son sens dans des architectures demandant de la performance ou de grandes montées en charge. On choisit d’impacter le fonctionnel, le perçu client (le client qui réserve une place de théâtre, ne sera sûr de l’avoir qu’au moment du paiement) au profit des performances et de la simplicité du système (le CQRS est un pattern simple qui n’exige pas des mécanismes compliqués de synchronisation. Dans notre exemple du théâtre, bloquer des places pendant les commandes d’un utilisateur impliquent des mécanismes de synchronisation en base de données, session, etc.).
http://code.msdn.microsoft.com/windowsazure/CQRS-on-Windows-Azure-125d11d1
http://martinfowler.com/bliki/CQRS.html