0Pricing
C# Academy · Leçon

Concepts de CQRS

Séparez les commandes des requêtes pour gagner en clarté.

Concepts de CQRS est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Qu’est-ce que CQRS ?

CQRS signifie séparation des responsabilités entre commandes et requêtes. L’idée est simple : séparer le code qui modifie l’état du code qui lit l’état.

// Commands : change state, return little or nothing
// Queries  : return data, change nothing

Commandes

Une commande exprime une intention de modifier le système : créer un order ou annuler un abonnement. Son nom est formulé à l’impératif et elle ne renvoie généralement qu’un identifiant, voire rien du tout.

public record CreateOrderCommand(int CustomerId, string[] Items);
public record CancelOrderCommand(int OrderId);

Requêtes

Une requête demande des données sans effets secondaires. Son nom indique ce qu’elle renvoie et elle contient les paramètres de filtrage nécessaires.

public record GetOrderByIdQuery(int OrderId);
public record ListOrdersQuery(int CustomerId, int Page);

Pourquoi les séparer ?

Les lectures et les écritures ont des besoins différents :

  • Les lectures doivent être rapides, dénormalisées et adaptées au cache.
  • Les écritures nécessitent une validation, des règles métier et de la cohérence.

Les séparer permet à chaque partie d’évoluer et de monter en charge indépendamment.

// Read side  -> optimized projections / DTOs
// Write side -> domain rules / transactions

Le modèle du handler

Chaque commande ou requête est traitée par un handler dédié. Un message, un handler, une responsabilité : cela permet de conserver des classes petites et ciblées.

// CreateOrderCommand  -> CreateOrderHandler
// GetOrderByIdQuery    -> GetOrderByIdHandler

Des contrôleurs minces

Avec CQRS, les contrôleurs restent minces. Ils construisent un message et le distribuent ; toute la logique réside dans le handler. Cela élimine les contrôleurs trop chargés et améliore la facilité des tests.

[HttpPost]
public async Task<IActionResult> Create(CreateOrderCommand cmd)
{
    var id = await _sender.Send(cmd);
    return CreatedAtAction(nameof(Get), new { id }, null);
}

CQRS n’est pas la reconstitution par événements

Une confusion fréquente : CQRS se limite à séparer les lectures et les écritures. Le stockage de l’état sous forme d’un journal d’événements est un modèle distinct qui s’associe bien à CQRS, mais qui n’est pas obligatoire.

// You can do CQRS with a plain single database.

Stockages de données unique ou séparés

Le CQRS élémentaire utilise une seule base de données pour les deux parties. Les configurations avancées utilisent des stockages distincts pour la lecture et l’écriture, maintenus synchronisés, en acceptant une cohérence éventuelle pour gagner en capacité. Commencez simplement.

// Level 1: one DB, separate handlers (most apps)
// Level 2: separate read/write models
// Level 3: separate read/write databases

Avantages

CQRS vous offre :

  • Des gestionnaires clairs et dédiés à une seule tâche.
  • Des tests plus faciles : chaque gestionnaire est testé isolément.
  • Un emplacement naturel pour les préoccupations transversales (validation, journalisation).
  • Une mise à l’échelle indépendante des lectures et des écritures.
// One class per use case = easy to find and test

Coûts

CQRS ajoute davantage de classes et d’indirections. Pour une application CRUD simple, cela peut être excessif. Appliquez-le lorsque la logique métier est riche ou que le domaine est complexe.

// Trade-off: clarity & scale vs. boilerplate

Adoptez MediatR

La bibliothèque MediatR implémente le modèle du médiateur en processus, qui distribue chaque message à son handler ; vous n’avez donc pas à les relier manuellement. La suite de ce cours l’utilise.

dotnet add package MediatR

Vérification rapide

Vérifiez que vous comprenez la distinction fondamentale.

Récapitulatif

Vous avez découvert les concepts de CQRS :

  • Séparer les commandes (modifications de l’état) des requêtes (lectures).
  • Chaque message possède un handler ciblé, ce qui permet de garder des contrôleurs minces.
  • CQRS est indépendant du stockage de l’état sous forme d’événements et peut utiliser une seule base de données.
  • MediatR distribue les messages aux gestionnaires.

Ensuite : les commandes et les handlers avec MediatR.

Questions Fréquemment Posées

La leçon « Concepts de CQRS » est-elle gratuite ?

Oui — le texte complet de « Concepts de CQRS » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Concepts de CQRS » ?

Séparez les commandes des requêtes pour gagner en clarté. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Concepts de CQRS » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Concepts de CQRS
  2. Commandes et gestionnaires avec MediatR
  3. Comportements du pipeline
  4. Notifications et événements
← Retour à C# Academy