Sin retornos NULL con Maybe

[ Arquitectura  ]

Maybe es una estructura(Monad) que nos ayuda a no tener que trabajar con objetos NULL.

De esta forma, el objeto, hereda una propiedad HasValue para determinar si es NULO o no, ahorrándonos el típico if (a != null) que tan feo queda en nuestro código.

Así la estructura quedaría de la siguiente manera:

using System;
namespace OurNameSpace
{
    public struct Maybe<T>
    {
        private readonly bool _hasValue;

        public bool HasValue => _hasValue;

        private readonly T _value;

        public T Value
        {
            get
            {
                if(!_hasValue)
                {
                    throw new InvalidOperationException();
                }
                return _value;
            }
        }

        public Maybe(T value)
        {
            _hasValue = true;
            _value = value;
        }

        public static implicit operator Maybe<T>(T value)
        {
            return new Maybe<T>(value);
        }
    }
}

Con lo que nuestras llamadas por ejemplo en un Reposity quedarían:

    public ReadOnlyCollection<Maybe<Libros>> GetLibros();
    public Maybe<Libro>> GetLibroById();

Y en nuestros servicios:

    var librosRepository = _librosService.GetLibros();
    if (librosRepository.HasValue){
        //TODO
    }

Un saludo y hasta la próxima.




@2017/@2024 - JRRN