ErrorOr para C# (.NET): guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

ErrorOr para C# (.NET): guía completa para manejar errores sin excepciones

En el desarrollo moderno con C# (.NET), el manejo de errores tradicionalmente se basa en el mecanismo de excepciones. Sin embargo, este enfoque tiene varias desventajas: las excepciones interrumpen el flujo de ejecución, generan una sobrecarga en la pila y, lo más importante, no siempre le indican al desarrollador de forma explícita que un método puede fallar. La librería ErrorOr ofrece una alternativa: un enfoque funcional donde el resultado de una operación se devuelve como un objeto especial que puede contener un valor exitoso o una lista de errores.

La idea principal de ErrorOr es hacer que el manejo de errores sea explícito y seguro en cuanto a tipos. En lugar de lanzar una excepción, el método devuelve un objeto de tipo ErrorOr<TValue>. El código que lo llama debe verificar si la operación fue exitosa antes de usar el resultado. Esto previene muchos errores relacionados con excepciones no controladas y hace que el código sea más predecible y fácil de entender.

La librería está inspirada en lenguajes con un sistema de tipos avanzado, como Rust (tipo Result<T, E>) y F# (tipo Result<'T, 'TError>). ErrorOr es ideal para Clean Architecture, Domain-Driven Design (DDD) y proyectos CQRS, donde es crucial separar claramente los escenarios exitosos de los errores. También funciona muy bien con el patrón «Railway Oriented Programming», permitiendo construir cadenas de operaciones con propagación automática de errores.

Instalación

La instalación de la librería ErrorOr en un proyecto .NET se realiza a través del administrador de paquetes NuGet. Ejecuta uno de los siguientes comandos en la terminal o en la consola del administrador de paquetes:

dotnet add package ErrorOr

O, si usas la Package Manager Console en Visual Studio:

Install-Package ErrorOr

Después de la instalación, agrega el espacio de nombres en tu archivo de código:

using ErrorOr;

Inicio rápido: ejemplo mínimo funcional

Escribamos una función simple que divida un número entre otro. En lugar de lanzar una excepción al dividir por cero, devolveremos un ErrorOr<double>.

using ErrorOr;

public static class Calculadora
{
    public static ErrorOr<double> Dividir(double dividendo, double divisor)
    {
        if (divisor == 0)
        {
            // Devolvemos un error si el divisor es cero
            return Error.Validation("Calculadora.DivisionPorCero", "El divisor no puede ser cero.");
        }

        // Devolvemos el resultado exitoso
        return dividendo / divisor;
    }
}

// Uso
public class Programa
{
    public static void Main()
    {
        ErrorOr<double> resultado = Calculadora.Dividir(10, 2);

        if (resultado.IsError)
        {
            Console.WriteLine($"Operación fallida: {resultado.FirstError.Description}");
        }
        else
        {
            Console.WriteLine($"Resultado: {resultado.Value}");
        }

        // Ejemplo con error
        ErrorOr<double> resultadoError = Calculadora.Dividir(10, 0);
        if (resultadoError.IsError)
        {
            Console.WriteLine($"Operación fallida: {resultadoError.FirstError.Description}");
        }
    }
}

En este ejemplo vemos los elementos clave: crear un error con Error.Validation(), devolver un valor exitoso (conversión implícita) y verificar el resultado mediante la propiedad IsError.

Métodos, funciones y clases principales

A continuación, se presenta un desglose detallado de los componentes clave de la librería ErrorOr. Para cada elemento se incluye la firma, una descripción y un ejemplo de código funcional.

1. Clase ErrorOr<TValue>

Firma: public rea

Recommendations