1 回答
TA貢獻1839條經(jīng)驗 獲得超15個贊
1)模型領(lǐng)域驅(qū)動設(shè)計方式
通過使域?qū)ο缶哂行袨?,您可以使事情變得更簡單?/p>
例如,您可以將促銷和促銷評估合并到一個類中。
貧血的對象不一定是最好的東西。
例如 :
class FixedPricePromotion extends AbstractPromotion{
String product;
Double price;
public void evaluate(Cart cart){
for(String product : cart.getProducts()){
if(product.equal(product)){
//some code to discount y price
}
}
}
}
現(xiàn)在可以通過這種方式更改 PromotionService :
class PromotionService {
void evaluation(Cart cart){
for(AbstractPromotion p : getPromotions){
p.evaluate(cart);
}
}
}
2)模型域和邏輯分離的方式
如果您不想合并它們,則可以將它們橋接起來,這要感謝從一個到另一個的字段依賴關(guān)系。
PromotionEvaluation可以是一個接口,它定義了在子類中定義的邏輯和抽象isMatch()和applyPromotion()方法的模板:
public interface PromotionEvaluation{
boolean isMatch(String product);
void applyPromotion(String product);
default void evaluate(Cart cart){
for(String product : cart.getProducts()){
if(isMatch(product)){
applyPromotion(product);
}
}
}
}
子類可以是:
class FixedPricePromotionEvaluation implements PromotionEvaluation{
FixedPricePromotion promotion;
public FixedPricePromotionEvaluation(FixedPricePromotion promotion){
this.promotion = promotion;
}
public boolean isMatch(String product){
return product.equal(promotion.product)
}
public void applyPromotion(String product){
// do your logic
}
}
現(xiàn)在您可以以這種方式迭代評估:
class PromotionService {
void evaluation(Cart cart){
for(PromotionEvaluation evaluation : getEvaluations()){
e.evaluate(cart);
}
}
}
添加回答
舉報
