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.