Patrón Specification

[ Arquitectura  ]

El patrón Specification es un patrón orientando a las aplicaciones con dominio. Es un patrón muy útil para validar queries y orientado a encapsular los objetos que pueden usarse en estas queries.

Es un patrón que separa la responsabilidad entre los objetos a recuperar y como los obtenemos.

Vamos con el ejemplo, que siempre es más claro:

public interface ISpecification<TEntity>
{
    bool IsSatisfiedBy(TEntity candidate);
}

public abstract class Specification<TEntity> : ISpecification<TEntity>
{
    public abstract bool IsSatisfiedBy(TEntity candidate);
}

public class LibrosPorTemaSpecification : Specification<Book>
{
    public override bool IsSatisfiedBy(Book candidate)
    {
        return (candidate.Tema.Any(x => x.Tema));
    }
}

public Book {
    public bool ContainsLibrosPorTema { get; set;}
}

public class Main {
    public bool HayLibroDeEsteTema(string tema){
        var book = new Book{
            Tema = tema
        };

        List<Books> repositoryBooks = new bookRepository().GetAll();

        if (repositoryBooks.Any(item => item.ContainsLibrosPorTema))
        {
            return true;
        }
        return false;
    }
}

Como vemos lo que hemos hecho es encapsular el Linq que generaríamos de forma que pasando el objeto y el método, obtenemos el resultado.




@2017/@2024 - JRRN