ErrorOr pour C# (.NET) : guide complet de gestion des erreurs sans exceptions
Dans le développement moderne en C# (.NET), la gestion des erreurs repose traditionnellement sur le mécanisme des exceptions. Cependant, cette approche présente plusieurs inconvénients : les exceptions perturbent le flux d'exécution, créent une surcharge de la pile et, surtout, n'indiquent pas toujours explicitement au développeur qu'une méthode peut échouer. La bibliothèque ErrorOr propose une alternative — une approche fonctionnelle où le résultat d'une opération est renvoyé sous la forme d'un objet spécial pouvant contenir soit une valeur de succès, soit une liste d'erreurs.
L'idée principale d'ErrorOr est de rendre la gestion des erreurs explicite et type-safe. Au lieu de lever une exception, la méthode renvoie un objet de type ErrorOr<TValue>. Le code appelant doit vérifier si l'opération a réussi avant d'utiliser le résultat. Cela évite de nombreux bugs liés aux exceptions non gérées et rend le code plus prévisible et plus facile à comprendre.
La bibliothèque s'inspire de langages dotés d'un système de types avancé, comme Rust (type Result<T, E>) et F# (type Result<'T, 'TError>). ErrorOr est idéale pour les architectures Clean Architecture, Domain-Driven Design (DDD) et les projets CQRS, où il est important de séparer clairement les scénarios de succès et d'erreur. Elle fonctionne également très bien avec le pattern « Railway Oriented Programming », permettant de construire des chaînes d'opérations avec transmission automatique des erreurs.
Installation
L'installation de la bibliothèque ErrorOr dans un projet .NET se fait via le gestionnaire de packages NuGet. Exécutez l'une des commandes suivantes dans le terminal ou la console du gestionnaire de packages :
dotnet add package ErrorOr
Ou, si vous utilisez la console du gestionnaire de packages dans Visual Studio :
Install-Package ErrorOr
Après l'installation, ajoutez l'espace de noms dans votre fichier de code :
using ErrorOr;
Démarrage rapide : exemple minimal fonctionnel
Écrivons une fonction simple qui divise un nombre par un autre. Au lieu de lever une exception en cas de division par zéro, nous renverrons un ErrorOr<double>.
using ErrorOr;
public static class Calculator
{
public static ErrorOr<double> Divide(double dividend, double divisor)
{
if (divisor == 0)
{
// Retourne une erreur si le diviseur est zéro
return Error.Validation("Calculator.DivisionByZero", "Le diviseur ne peut pas être zéro.");
}
// Retourne un résultat réussi
return dividend / divisor;
}
}
// Utilisation
public class Program
{
public static void Main()
{
ErrorOr<double> result = Calculator.Divide(10, 2);
if (result.IsError)
{
Console.WriteLine($"Opération échouée : {result.FirstError.Description}");
}
else
{
Console.WriteLine($"Résultat : {result.Value}");
}
// Exemple avec erreur
ErrorOr<double> errorResult = Calculator.Divide(10, 0);
if (errorResult.IsError)
{
Console.WriteLine($"Opération échouée : {errorResult.FirstError.Description}");
}
}
}
Dans cet exemple, nous voyons les éléments clés : la création d'une erreur via Error.Validation(), le retour d'une valeur de succès (conversion implicite) et la vérification du résultat via la propriété IsError.
Méthodes, fonctions et classes principales
Voici une analyse détaillée des composants clés de la bibliothèque ErrorOr. Pour chaque élément, la signature, la description et un exemple de code fonctionnel sont fournis.
1. Classe ErrorOr<TValue>
Signature : public rea
Aussi dans la bibliothèque
Envoi de SMS en Swift (iOS/macOS) : API de la bibliothèque MessageUI
Travailler avec les images en Go (Golang) : bibliothèques et exemples
Validation des données en C# (.NET) : bibliothèques, attributs et FluentValidation
Client OAuth pour JavaScript (Node.js) : aperçu et exemples d'utilisation