FluentValidation .NET Core

La validation des données est une étape cruciale dans le développement d’applications, garantissant que les informations fournies par les utilisateurs respectent les critères attendus. Dans l’écosystème .NET Core, la bibliothèque FluentValidation offre une approche fluide et expressive pour définir ces règles de validation, améliorant ainsi la lisibilité et la maintenabilité du code. Ce guide complet vous montrera comment intégrer et utiliser FluentValidation dans vos projets .NET Core pour assurer une validation robuste et efficace.

fluent-validation-net-core
fluent-validation-net-core

Qu’est-ce que FluentValidation ?

FluentValidation est une bibliothèque open-source pour .NET qui permet de définir des règles de validation de manière fluide et expressive. Contrairement aux annotations de données traditionnelles, FluentValidation sépare la logique de validation des modèles, offrant une meilleure séparation des préoccupations et une plus grande flexibilité.

Pourquoi utiliser FluentValidation avec .NET Core ?

  • Lisibilité améliorée : Les règles de validation sont définies de manière fluide, rendant le code plus lisible et compréhensible.
  • Séparation des préoccupations : La logique de validation est isolée des modèles de données, facilitant la maintenance et les tests.
  • Flexibilité : Possibilité de définir des règles de validation complexes, conditionnelles et personnalisées.
  • Testabilité : Les règles de validation peuvent être facilement testées de manière unitaire.

Mise en place de FluentValidation dans un projet .NET Core

1. Installation de Fluent Validation dans .NET Core

Pour commencer, installez les packages NuGet requis dans votre projet :

Install-Package FluentValidation
Install-Package FluentValidation.DependencyInjectionExtensions

2. Configuration des services

Dans le fichier Program.cs (ou Startup.cs pour les versions antérieures à .NET 6), configurez les services pour utiliser FluentValidation :

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddFluentValidationAutoValidation();
builder.Services.AddValidatorsFromAssemblyContaining<Program>();

var app = builder.Build();

app.MapControllers();

app.Run();
 

Cette configuration permet à l’application de détecter automatiquement les validateurs définis dans l’assembly courant.

3. Définition du modèle et du validateur Fluent Validation

Supposons que nous ayons un modèle Utilisateur :

public class Utilisateur
{
    public string Nom { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
}

Nous allons maintenant créer un validateur pour ce modèle en héritant de AbstractValidator<T>:

using FluentValidation;

public class UtilisateurValidator : AbstractValidator<Utilisateur>
{
    public UtilisateurValidator()
    {
        RuleFor(u => u.Nom)
            .NotEmpty().WithMessage("Le nom est obligatoire.")
            .Length(2, 50).WithMessage("Le nom doit comporter entre 2 et 50 caractères.");

        RuleFor(u => u.Email)
            .NotEmpty().WithMessage("L'email est obligatoire.")
            .EmailAddress().WithMessage("L'email n'est pas valide.");

        RuleFor(u => u.Age)
            .InclusiveBetween(18, 99).WithMessage("L'âge doit être compris entre 18 et 99 ans.");
    }
}
 

Dans ce validateur, nous définissons des règles pour chaque propriété du modèle Utilisateur en utilisant une syntaxe fluide.

4. Utilisation de Fluent Validation dans un contrôleur .NET Core

Dans votre contrôleur, vous pouvez utiliser le validateur comme suit:

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class UtilisateursController : ControllerBase
{
    [HttpPost]
    public IActionResult CreerUtilisateur([FromBody] Utilisateur utilisateur)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        // Logique pour créer l'utilisateur

        return Ok("Utilisateur créé avec succès !");
    }
}

Grâce à la configuration précédente, FluentValidation valide automatiquement le modèle avant l’exécution de l’action du contrôleur.

Bonnes pratiques et erreurs courantes

  • Séparation de la logique de validation : Toujours séparer la logique de validation des modèles de données pour une meilleure maintenabilité.
  • Messages d’erreur clairs : Fournissez des messages d’erreur explicites pour améliorer l’expérience utilisateur.
  • Tests unitaires : Écrivez des tests unitaires pour vos validateurs afin de garantir leur bon fonctionnement.
  • Validation conditionnelle : Utilisez des méthodes telles que When ou Unless pour appliquer des règles de validation conditionnelles.
  • Évitez la validation excessive : Ne surchargez pas vos modèles avec trop de règles de validation, ce qui pourrait nuire aux performances.

Conclusion

FluentValidation est un outil puissant pour gérer la validation des données dans les applications .NET Core. En l’intégrant correctement, vous pouvez améliorer la qualité de votre code, assurer la validité des données entrantes et offrir une meilleure expérience utilisateur. N’hésitez pas à explorer davantage les fonctionnalités avancées de FluentValidation pour adapter la validation à vos besoins spécifiques.

Ressources complémentaires