需要帮助了解规范模式 - 继承
本文关键字:模式 继承 范模式 帮助 了解 | 更新日期: 2023-09-27 18:06:40
我相信这更像是一个继承问题,但由于我试图通过实现使用它的模式来更好地掌握它,我想我会问我的问题,以便更好地掌握。
如果您使用规范模式,其中有许多规范都派生自规范,并且使用包装器规范类包装它们:
例:
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);
}
}
我的问题是:既然您将客户实体传递到接受CustCreditStatusSpec的IsSatisfiedBy方法(第一个假设(,客户实体如何传递给无限信用限制规范和EnoughCustCreditAmtSpec规范的IsSatisifedBy方法?
谢谢
Specification<T>.And
和 Specification<T>.Or
方法生成一个Specification<T>
,该采用 T
的实例并根据逻辑定义的规范对其进行测试。
所以Specification<T>.And
看起来像这样:
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); }
}
同样适用于Specification<T>.Or
.
所以重点是
acceptCustCreditStatusSpec
.And(unlimitedCreditLimitSpec.Or(sufficientCustCreditAmtSpec))
是一个规范,给定t
它返回
acceptCustCreditStatusSpec.IsSatisfiedBy(t) &&
(unlimitedCreditLimitSpec.IsSatisfiedBy(t) ||
sufficientCustCreditAmtSpec.IsSatisifedBy(t)
);