namespace ZeroLevel.Specification
{
    public interface ISpecification<T>
    {
        bool IsSatisfiedBy(T o);

        ISpecification<T> And(ISpecification<T> specification);

        ISpecification<T> Or(ISpecification<T> specification);

        ISpecification<T> Not();
    }
}