1 回答
TA贡献1839条经验 获得超15个赞
1)模型领域驱动设计方式
通过使域对象具有行为,您可以使事情变得更简单。
例如,您可以将促销和促销评估合并到一个类中。
贫血的对象不一定是最好的东西。
例如 :
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
}
}
}
}
现在可以通过这种方式更改 PromotionService :
class PromotionService {
void evaluation(Cart cart){
for(AbstractPromotion p : getPromotions){
p.evaluate(cart);
}
}
}
2)模型域和逻辑分离的方式
如果您不想合并它们,则可以将它们桥接起来,这要感谢从一个到另一个的字段依赖关系。
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
}
}
现在您可以以这种方式迭代评估:
class PromotionService {
void evaluation(Cart cart){
for(PromotionEvaluation evaluation : getEvaluations()){
e.evaluate(cart);
}
}
}
添加回答
举报