规范和策略之间的区别?
我正在阅读埃里克·埃文斯(Eric Evans)写的精彩著作《领域驱动设计》(Domain Driven Design)。在他的书中,Eric描述了两个不同的概念:规范模式和策略。
下面是一个规范示例:
public interface ProjectSpecification {
public boolean isSatisfiedBy(Project p);
}
public class ProjectIsOverdueSpecification implements ProjectSpecification {
public boolean isSatisfiedBy(Project p) { … }
}
//client:
if {
(projectIsOverdueSpecification.isSatisfiedBy(theCurrentProject) { … }
}
下面是一个策略示例:
public class CargoBooking {
private OverBookingPolicy overBookingPolicy = new OverBookingPolicy();
public int makeBooking(Cargo cargo, Voyage voyage) {
if (!overbookingPolicy.isAllowed(cargo, voyage))
return –1;
int confirmation = orderConfirmationSequence.next();
voyage.addCargo(cargo, confirmation);
return confirmation;
}
}
public OverBookingPolicy {
public boolean isAllowed(Cargo cargo, Voyage voyage) {
return (cargo.size() + voyage.bookedCargoSize()) <= (voyage.capacity() * 1.1);
}
}
我知道政策实际上是一种策略,但在上面的两个例子中,绝对没有区别。因此,我现在的问题是:这两种模式之间有什么区别?这两种模式都使业务规则变得明确,那么我们为什么要区分这两种模式呢?对我来说,两者都是谓词。