C# 需要帮助理解规范模式-继承吗

C# 需要帮助理解规范模式-继承吗,c#,inheritance,specification-pattern,C#,Inheritance,Specification Pattern,我相信这更像是一个继承性问题,但由于我正试图通过实现一个使用它的模式来更好地掌握它,我想我会问我的相关问题以更好地掌握它 如果使用,有许多规范都源自规范,并使用包装器规范类包装它们: 例如: public class CustomerCreditCheck : Specification<Customer> { private readonly UnlimitedCreditLimitSpecification unlimitedCreditLimitSpec = new U

我相信这更像是一个继承性问题,但由于我正试图通过实现一个使用它的模式来更好地掌握它,我想我会问我的相关问题以更好地掌握它

如果使用,有许多规范都源自规范,并使用包装器规范类包装它们:

例如:

public class CustomerCreditCheck : Specification<Customer> {
    private readonly UnlimitedCreditLimitSpecification unlimitedCreditLimitSpec = new UnlimitedCreditLimitSpecification();
    private readonly SufficientCustomerCreditAmountSpec sufficientCustCreditAmtSpec = new SufficientCustomerCreditAmountSpec();
    private readonly AcceptableCustomerCreditStatusSpecification acceptCustCreditStatusSpec = new AcceptableCustomerCreditStatusSpecification();

    public override bool IsSatisfiedBy(Customer customer) {

        return acceptCustCreditStatusSpec
               .And(unlimitedCreditLimitSpec.Or(sufficientCustCreditAmtSpec))
               .IsSatisfiedBy(customer);
    }
}
公共类客户信用检查:规范{
private readonly UnlimitedCreditLimitSpecification unlimitedCreditLimitSpec=新建UnlimitedCreditLimitSpecification();
private readonly SufficientCustomerCreditAmountSpec SufficientCustomerCreditAmtSpec=新的SufficientCustomerCreditAmountSpec();
private readonly AcceptableCustomerCreditStatusSpecification acceptCustCreditStatusSpec=新的AcceptableCustomerCreditStatusSpecification();
公共覆盖布尔满足(客户){
返回acceptCustCreditStatusSpec
.和(未受限制的信用额度规范或(足够的客户信用额度规范))
.被(客户)满意;
}
}
我的问题是:既然您要将客户实体传递到acceptCustCreditStatusSpec(第一个假设)的IsSatifiedBy方法中,那么客户实体如何传递到unlimitedCreditLimitSpec和FullicientCustomCreditAmTSSpec规范的IsSatifiedBy方法中

谢谢,

规范。和和
规范。或
方法构建一个
规范
,该规范以
T
为例,并根据逻辑定义的规范对其进行测试

因此,
规范和
看起来像:

public Specification<T> And(Specification<T> left, Specification<T> right) {
    return new SpecificationFromPredicate(
        t => left.IsSatisfiedBy(t) && right.IsSatisfiedBy(t)
    );
}

public class SpecificationFromPredicate<T> : Specification<T> {
    private readonly Func<T, bool> predicate;

    public SpecificationFromPredicate(Func<T, bool> predicate) {
        this.predicate = predicate;
    }

    public bool IsSatisfiedBy(T t) { return this.predicate(t); }
}
是一个规范,并且给定它返回的
t

acceptCustCreditStatusSpec.IsSatisfiedBy(t) &&
    (unlimitedCreditLimitSpec.IsSatisfiedBy(t) ||
         sufficientCustCreditAmtSpec.IsSatisifedBy(t)
    );
acceptCustCreditStatusSpec.IsSatisfiedBy(t) &&
    (unlimitedCreditLimitSpec.IsSatisfiedBy(t) ||
         sufficientCustCreditAmtSpec.IsSatisifedBy(t)
    );