FluentValidation en .NET : où placer les validations et pourquoi
FluentValidation est utile quand il clarifie les règles d'entrée et évite la duplication. Il devient moins utile lorsqu'il remplace la vraie logique métier.

FluentValidation est largement utilisé dans les applications .NET pour valider des commandes, des requêtes ou des DTO HTTP. C'est un outil utile, mais il faut être clair sur son rôle. Il ne sert pas à porter toute la logique métier. Il sert à exprimer proprement les règles d'entrée.
Ce que FluentValidation fait bien
Il est excellent pour:
- vérifier qu'un champ est requis
- contrôler un format
- imposer une longueur ou une plage
- centraliser la validation d'entrée
Exemple:
public sealed class CreateUserValidator : AbstractValidator<CreateUserCommand>
{
public CreateUserValidator()
{
RuleFor(x => x.Email).NotEmpty().EmailAddress();
RuleFor(x => x.Name).NotEmpty().MaximumLength(120);
}
}
Ce qu'il ne faut pas lui déléguer
FluentValidation ne doit pas remplacer:
- les invariants du domaine
- les règles métier complexes
- les décisions qui dépendent de l'état profond du système
La validation d'entrée n'est pas la logique métier.
Ou le placer
Le placement le plus sain est souvent dans la couche application, au plus près des commandes et requêtes. Cela permet de filtrer les entrées avant l'exécution du cas d'usage, tout en laissant le domaine protéger ses propres invariants.
Conclusion
FluentValidation est utile lorsqu'il réduit le bruit, standardise les règles d'entrée et clarifie les contrats. Il devient problématique quand il sert à déplacer hors du domaine des règles qui devraient y rester.


