Qu'est-ce que MediatR et pourquoi en a-t-on besoin ?
\n\nMediatR est une bibliothèque légère mais puissante pour .NET, implémentant le pattern Mediator. Dans le monde du développement logiciel, en particulier dans les applications construites sur l'architecture CQRS (Command Query Responsibility Segregation — séparation des responsabilités en commandes et requêtes), MediatR est devenue un standard de facto.
\n\nPourquoi en a-t-on besoin ?
\nDans l'architecture classique, lorsqu'une classe (par exemple, un contrôleur) souhaite exécuter une action dans une autre classe (par exemple, un service), elle doit connaître l'existence de ce service et son interface. Cela crée un couplage fort (tight coupling). Si vous souhaitez ajouter de la journalisation, de la validation ou de la mise en cache avant d'appeler le service, vous devrez modifier le code du contrôleur ou créer des décorateurs, ce qui complique la maintenance.
\n\nMediatR résout ce problème en introduisant le concept de médiateur. Les composants du système (par exemple, les contrôleurs) ne communiquent plus directement. Au lieu de cela, ils envoient des requêtes (Request) ou des commandes (Command) via MediatR. La bibliothèque trouve et appelle elle-même le gestionnaire (Handler) correspondant.
\n\nAvantages clés de l'utilisation de MediatR :
\n- \n
- Couplage faible (Loose Coupling) : L'expéditeur de la requête ne sait rien du destinataire. Il ne connaît que le type de la requête. \n
- Principe de responsabilité unique (SRP) : Chaque gestionnaire est responsable d'une seule action (par exemple, "Créer un utilisateur", "Obtenir la liste des commandes"). \n
- Simplification du CQRS : MediatR est idéal pour séparer les commandes (modifiant l'état) et les requêtes (lisant l'état). \n
- Chaînes de comportement (Pipeline Behaviors) : Vous pouvez facilement ajouter des fonctionnalités transversales (journalisation, validation, transactions) sans modifier le code des gestionnaires. \n
- Testabilité : Il est facile de tester les gestionnaires de manière isolée, et également de remplacer leur implémentation. \n
Installation de MediatR
\nMediatR est distribuée via NuGet. Vous pouvez l'installer de plusieurs manières :
\n\n1. Via .NET CLI (méthode recommandée)
\nOuvrez un terminal à la racine de votre projet et exécutez la commande :
\ndotnet add package MediatR\nVous aurez également besoin du package pour l'injection de dépendances (DI) si vous utilisez ASP.NET Core :
\ndotnet add package MediatR.Extensions.Microsoft.DependencyInjection\n\n2. Via la console du gestionnaire de packages (Visual Studio)
\nInstall-Package MediatR\nInstall-Package MediatR.Extensions.Microsoft.DependencyInjection\n\n3. Via l'interface utilisateur du gestionnaire de packages NuGet
\nDans Visual Studio : Outils → Gestionnaire de packages NuGet → Gérer les packages NuGet pour la solution.... Recherchez "MediatR" et installez les deux packages.
\n\nDémarrage rapide avec un exemple de code
\nCréons un exemple simple : envoyer un message de bienvenue à un utilisateur.
\n\nÉtape 1 : Créez un projet
\nCréez un nouveau projet console ou un projet ASP.NET Core Web API.
\n\nÉtape 2 : Définissez une Requête (Request)
\nCréez une classe qui représentera la requête. Elle doit implémenter l'interface IRequest<TResponse>, où TResponse est le type de la valeur de retour.
using MediatR;\n\npublic class PingRequest : IRequest<string>\n{\n public string Message { get; set; } = "Ping";\n}\n\nÉtape 3 : Créez un Gestionnaire (Handler)
\nCréez une classe qui implémente l'interface IRequestHandler<TRequest, TResponse>.
using MediatR;\nusing System.Threading;\nusing System.Threading.Tasks;\n\npublic class PingHandler : IRequestHandler<PingRequest, string>\n{\n public Task<string Aussi dans la bibliothèque
Travailler avec XML en C++ : bibliothèques pugixml, TinyXML-2 et RapidXML
magic_enum C++ : guide complet avec exemples concrets
Génération Swagger/OpenAPI pour TypeScript : bibliothèques et outils
Supertest pour JavaScript (Node.js) : guide complet avec exemples