El patrón de diseño Result

Alexis Vega - May 28 - - Dev Community

El patrón de diseño Result (también conocido como Either o Outcome) es una técnica que se utiliza para manejar resultados exitosos o errores en una operación. A menudo se emplea en lenguajes funcionales y se está volviendo más popular en C# debido a su utilidad en el manejo de errores y resultados.

¿Qué es el patrón Result?
El patrón Result se basa en la idea de que una función puede devolver un valor exitoso o un error. En lugar de lanzar excepciones, el patrón Result devuelve un objeto que contiene información sobre el resultado o el error. Esto permite un manejo más explícito y controlado de los posibles resultados.

Implementación en C#
Aquí hay un ejemplo de cómo implementar el patrón Result en C#:

Definición de la clase Result:

public class Result<T>
{
    public T Value { get; }
    public bool IsSuccess { get; }
    public string ErrorMessage { get; }

    private Result(T value)
    {
        Value = value;
        IsSuccess = true;
    }

    private Result(string errorMessage)
    {
        ErrorMessage = errorMessage;
        IsSuccess = false;
    }

    public static Result<T> Success(T value) => new Result<T>(value);
    public static Result<T> Failure(string errorMessage) => new Result<T>(errorMessage);
}

Enter fullscreen mode Exit fullscreen mode

Uso del patrón Result

public Result<int> Divide(int dividend, int divisor)
{
    if (divisor == 0)
        return Result<int>.Failure("Cannot divide by zero.");

    return Result<int>.Success(dividend / divisor);
}

// Ejemplo de uso
var result = Divide(10, 2);
if (result.IsSuccess)
{
    Console.WriteLine($"Resultado: {result.Value}");
}
else
{
    Console.WriteLine($"Error: {result.ErrorMessage}");
}

Enter fullscreen mode Exit fullscreen mode

Ventajas del patrón Result
Proporciona una forma más explícita de manejar resultados y errores.
Evita el uso excesivo de excepciones.
Facilita el flujo de control en situaciones de manejo de errores.

Consideraciones
Asegúrate de documentar claramente los posibles resultados y errores en tus funciones.
Utiliza el patrón Result cuando sea apropiado, no aplicarlo en exceso.

Alexis Vega, Desarrollador de Baufest

.