吸气剂方法的使用

时间:2018-11-02 07:39:58

标签: java grails groovy

我有一个场景,其中卖方配置了以下费用:

BigDecimal paidPlanFixedFee
BigDecimal fixedFee
Boolean isPaidPlan

现在,如果卖方已支付计划,则应在触发付款时使用paidPlanFixedFee;如果卖方使用免费计划,则应使用fixedFee。

一种方法是在涉及fixedFee的任何地方更改代码,例如:

if(paidPlan){
// Use paidPlanFixedFee
}else{
// Use fixedFee
}

其他方法是仅更改fixedFee的getter方法:

BigDecimal getFixedFee(){
  if(paidPlan){
    // return paidPlanFixedFee
  } else{
   // return fixedFee
  }
}

在这种情况下使用吸气剂方法是一种好习惯还是应该避免?

1 个答案:

答案 0 :(得分:1)

用这种逻辑覆盖getter并不是一个好主意。在这种情况下,您应该控制每个getter的用法(例如json序列化或db模型映射等),因为如果需要在某个地方获取原始值可能会造成麻烦。

最好具有单独的calculateFee()方法

那瞬态场呢?

如果要在Groovy中创建没有实际字段的getter:

BigDecimal getFee(){
  paidPlan ? paidPlanFixedFee : fixedFee
}

然后您可以像常规字段一样访问它:

println instance.fee

在这种情况下,您需要将fixedFee更改为引用了fixedFee的费用。但是更改之后,所有将来的修改将变得更加容易。