Architecture systèmeIngénieur Backend

Qu'est-ce que CQRS (Command Query Responsibility Segregation) et pourquoi l'appliquer ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

CQRS est un modèle de séparation des responsabilités entre les commandes (Commands) et les requêtes (Queries). La commande modifie l'état du système, tandis que la requête ne fait qu'accéder aux données. Le plus souvent, des modèles de données différents et des interfaces distinctes sont conçus pour ces tâches.

Avantage de CQRS : il permet d'optimiser les processus d'accès aux données pour la lecture et l'écriture séparément, ce qui améliore les performances des systèmes complexes, facilite l'évolutivité et l'optimisation pour différents scénarios de charge.

Exemple de code (CQRS avec C#) :

interface ICommand { } interface IQuery<TResult> { } class CreateOrderCommand : ICommand { public int OrderId { get; set; } } class GetOrderQuery : IQuery<Order> { public int OrderId { get; set; } } class OrderCommandHandler { public void Handle(CreateOrderCommand command) { // Application des changements dans la BDD } } class OrderQueryHandler { public Order Handle(GetOrderQuery query) { // Lecture des données depuis la BDD sans changements return new Order(); } }

Caractéristiques clés :

  • Sépare les opérations de modification d'état des opérations de lecture
  • Permet d'optimiser le stockage et le traitement de chacune des parties séparément
  • Renforce la cohérence et la sécurité de l'architecture, notamment sous une forte charge

Questions pièges.

CQRS est-il une version de CRUD, séparée en deux classes ?

Non, CQRS est plus qu'une simple séparation des méthodes. Des modèles, structures de données et interfaces distincts sont généralement créés pour la partie lecture et la partie commande, et différentes bases de données sont souvent utilisées.

CQRS convient-il à tous les projets ?

Non. L'implémentation de CQRS n'a de sens que pour des systèmes complexes et évolutifs avec des exigences élevées en matière de performances et d'indépendance de traitement. Pour des projets plus petits, cela est souvent excessif.

CQRS est-il une garantie de eventual consistency (cohérence finale) ?

Pas nécessairement. CQRS peut être mis en œuvre avec eventual consistency dans des systèmes distribués, mais le modèle lui-même ne fournit pas cette garantie.