Le pattern Mediator est devenu l'un des piliers de l'architecture moderne des applications .NET, permettant de découpler les composants et de faciliter la communication entre eux. Pendant des années, MediatR, créé par Jimmy Bogard, a été la référence incontournable pour implémenter ce pattern. Cependant, suite à sa récente transition vers un modèle commercial payant, de nombreux développeurs et entreprises recherchent des alternatives.
Dans cet article, nous allons explorer trois excellentes alternatives gratuites et open source à MediatR : Brighter, FluentMediator et SimpleMediator. Chacune de ces bibliothèques offre une approche légèrement différente du pattern Mediator, tout en restant fidèle à ses principes fondamentaux.
Pourquoi chercher une alternative à MediatR ?
Avant de plonger dans les alternatives, rappelons pourquoi MediatR est si populaire et pourquoi sa transition vers un modèle payant a poussé beaucoup de développeurs à chercher des alternatives :
- Découplage : MediatR permet de découpler les composants d'une application, rendant le code plus maintenable.
- Pipeline de comportements : Il offre un pipeline configurable pour ajouter des comportements transversaux (logging, validation, etc.).
- Simplicité : Son API est intuitive et facile à intégrer dans des projets existants.
Le passage de MediatR à un modèle commercial signifie que les équipes doivent désormais payer pour continuer à utiliser cette bibliothèque dans leurs projets. Pour les petites entreprises, les startups ou les projets open source, cela peut représenter un coût non négligeable, d'où l'intérêt de se tourner vers des alternatives gratuites.
Voyons maintenant en détail les trois alternatives proposées.
1.Brighter
Présentation générale
Brighter est une implémentation du pattern Command Processor et Dispatcher, qui partage de nombreuses similitudes avec le pattern Mediator. Développé initialement par Ian Cooper, Brighter est une bibliothèque mature qui existe depuis 2014, ce qui en fait l'une des plus anciennes alternatives à MediatR.
Installation et configuration
Pour installer Brighter via NuGet, utilisez la commande suivante :
La configuration de base de Brighter dans une application ASP.NET Core se fait comme suit :
Fonctionnalités principales
Brighter offre plusieurs fonctionnalités intéressantes :
- Support des commandes et des événements : Brighter distingue clairement les commandes (demandes qui changent l'état) des événements (notifications de changements d'état).
- Pipeline de traitement : Similaire au pipeline de comportements de MediatR, Brighter permet d'ajouter des middlewares appelés "handlers" qui peuvent être chaînés.
- Support transactionnel : Brighter inclut un support pour les transactions, permettant de gérer les opérations atomiques.
- Support de la messagerie : Il offre une intégration native avec plusieurs systèmes de messagerie comme RabbitMQ.
Exemples d'utilisation
Voici comment définir une commande simple avec Brighter :
Avantages :
- Mature et stable, avec une communauté active
- Support natif pour la messagerie asynchrone
- Fonctionnalités avancées comme le support transactionnel
- Documentation détaillée
Inconvénients :
- Courbe d'apprentissage un peu plus élevée que MediatR
- Configuration plus complexe pour les cas d'utilisation avancés
- API légèrement moins intuitive que celle de MediatR
2.FluentMediator
Présentation générale
FluentMediator est une bibliothèque légère qui implémente le pattern Mediator avec une API fluent. Comme son nom l'indique, il met l'accent sur la fluidité et la lisibilité du code. Créé par Thiago Barradas, FluentMediator est plus récent que Brighter mais gagne rapidement en popularité.
Installation et configuration
Pour installer FluentMediator via NuGet :
Configuration dans ASP.NET Core :
Fonctionnalités principales
- API fluent : FluentMediator se distingue par son API fluent qui rend la configuration très lisible.
- Support des pipelines : Il permet de définir des pipelines de traitement pour les commandes.
- Support asynchrone natif : FluentMediator prend en charge les opérations asynchrones de manière native.
- Léger et performant : La bibliothèque est conçue pour être légère et performante, avec un minimum de surcharge.
Exemples d'utilisation
Avantages :
- API fluent très lisible
- Configuration simple et intuitive
- Support asynchrone natif
- Léger et performant
Inconvénients :
- Communauté plus petite que Brighter ou MediatR
- Moins de fonctionnalités avancées
- Documentation moins complète
3.SimpleMediator
Présentation générale
SimpleMediator, comme son nom l'indique, vise à fournir une implémentation simple et minimaliste du pattern Mediator. Il a été conçu pour être facile à comprendre et à intégrer, tout en offrant les fonctionnalités essentielles d'un mediator.
Installation et configuration
Installation via NuGet :
Configuration dans ASP.NET Core :
Fonctionnalités principales
- Simplicité : SimpleMediator se concentre sur l'essentiel du pattern Mediator, sans fonctionnalités superflues.
- Auto-enregistrement des handlers : Il peut scanner automatiquement les assemblies pour trouver et enregistrer les handlers.
- Support des commandes et des requêtes : SimpleMediator fait la distinction entre les commandes (sans valeur de retour) et les requêtes (avec valeur de retour).
- Support des notifications : Il prend en charge le pattern de publication/abonnement pour les notifications.
Exemples d'utilisation
Avantages :
- Très simple à comprendre et à utiliser
- Minimaliste, sans surcharge inutile
- Auto-enregistrement des handlers
- Bonne performance
Inconvénients :
- Moins de fonctionnalités avancées que Brighter
- Pas de pipeline de comportements intégré
- Documentation limitée
- Communauté plus petite
Comparaison des trois alternatives
Pour vous aider à choisir l'alternative qui convient le mieux à votre projet, voici une comparaison des trois bibliothèques selon différents critères :
Maturité et adoption
- Brighter : La plus mature des trois, existant depuis 2014, avec une base d'utilisateurs stable.
- FluentMediator : Plus récente, mais gagne rapidement en popularité grâce à son API intuitive.
- SimpleMediator : La moins mature des trois, avec une adoption plus limitée.
Fonctionnalités
- Brighter : La plus riche en fonctionnalités, avec support pour la messagerie, les transactions, etc.
- FluentMediator : Fonctionnalités essentielles avec une API fluent distinctive.
- SimpleMediator : Fonctionnalités de base du pattern Mediator, mais sans fioritures.
Facilité d'utilisation
- SimpleMediator : Le plus simple à prendre en main grâce à son approche minimaliste.
- FluentMediator : Facile à utiliser grâce à son API fluent intuitive.
- Brighter : Un peu plus complexe à configurer et à utiliser, surtout pour les fonctionnalités avancées.
Performance
Les trois bibliothèques offrent de bonnes performances, mais dans des benchmarks simples :
- SimpleMediator : Généralement le plus performant en raison de sa simplicité.
- FluentMediator : Très bonnes performances grâce à son design léger.
- Brighter : Légèrement moins performant dans certains scénarios en raison de ses fonctionnalités plus étendues.
Documentation et support communautaire
- Brighter : Documentation la plus complète et communauté active.
- FluentMediator : Documentation correcte mais moins détaillée.
- SimpleMediator : Documentation plus limitée et communauté plus petite.
Migration depuis MediatR
Si vous envisagez de migrer depuis MediatR vers l'une de ces alternatives, voici quelques conseils pour faciliter la transition :
Stratégie générale de migration
- Analyse de l'utilisation actuelle : Identifiez comment vous utilisez MediatR dans votre application.
- Choix de l'alternative : En fonction de vos besoins, choisissez l'alternative qui correspond le mieux.
- Migration progressive : Envisagez une migration module par module plutôt qu'une refonte complète.
- Tests : Assurez-vous d'avoir une bonne couverture de tests pour valider la migration.
Migration vers Brighter
Migration vers FluentMediator
Migration vers SimpleMediator
Conclusion
Avec le passage de MediatR à un modèle commercial, il est rassurant de constater que plusieurs alternatives gratuites et de qualité existent sur le marché. Que vous choisissiez Brighter pour sa maturité et ses fonctionnalités avancées, FluentMediator pour son API fluent et intuitive, ou SimpleMediator pour sa simplicité et ses performances, chacune de ces bibliothèques constitue une excellente alternative à MediatR.
La migration depuis MediatR vers l'une de ces alternatives peut nécessiter quelques ajustements, mais les concepts fondamentaux du pattern Mediator restent les mêmes, ce qui facilite la transition.
Enfin, rappelez-vous que le choix d'une bibliothèque doit toujours être guidé par les besoins spécifiques de votre projet et de votre équipe. N'hésitez pas à faire des tests comparatifs et à évaluer chaque option en fonction de vos critères prioritaires.
Ressources supplémentaires
- Dépôt GitHub de Brighter
- Dépôt GitHub de FluentMediator
- Dépôt GitHub de SimpleMediator
- Documentation sur le pattern Mediator