我正在阅读Eric Evans撰写的精彩著作《域驱动设计》。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); } }
我知道政策实际上是一项战略,但是在以上两个示例中绝对没有区别。所以我现在的问题是:这两种模式之间有什么区别?两种模式都使业务规则明确,为什么我们要区分这两种模式?对我来说,这都是谓词。