我正在閱讀由埃裏克埃文斯寫的輝煌的書籍「域驅動設計」。 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);
}
}
我知道,一個政策實際上是一種策略,但上面有兩個例子是絕對沒有區別的。所以我現在的問題是:這兩種模式有什麼區別?這兩種模式都使業務規則明確,所以爲什麼我們要區分這兩種模式?對我而言,這兩者都是一種謂詞。
我會說,規範的目標是描述實例和策略的功能是關於描述操作。但我真的不確定,但我也讀過這本書。 – SpaceTrucker