package org.dayatang.domain.specification;
/**
* 业务规范接口,对应于DDD一书中的“规范”概念,用于判断业务规则是否得到满足。
* @param <T> 类型参数,表示规范所应用到的目标对象类型
*/
public interface Specification<T> {
/**
* 检查 {@code t} 是否由本规范满足.
*
* @param t 要测试的对象.
* @return 如果{@code t}满足此规范则返回{@code true}。
*/
boolean isSatisfiedBy(T t);
/**
* 创建一个新规范,作为本规范{@code this}和另一个规范{@code specification}的“与(AND)”操作的结果
* @param specification 另一个规范。
* @return 一个新规范。
*/
Specification<T> and(Specification<T> specification);
/**
* 创建一个新规范,作为本规范{@code this}和另一个规范{@code specification}的“或(OR)”操作的结果
* @param specification 另一个规范。
* @return 一个新规范。
*/
Specification<T> or(Specification<T> specification);
/**
* 创建一个新规范,作为本规范的“非(NOT)”操作的结果
* @return 一个新规范。
*/
Specification<T> not();
}