我有一种情况,其中卖方配置了以下费用:

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
  }
}

在这种情况下使用 setter/getter 方法是一种好习惯还是应该避免?

最佳答案

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

最好有单独的calculateFee()方法

那 transient 场呢?

如果您将在groovy中创建没有实际字段的getter:

BigDecimal getFee(){
  paidPlan ? paidPlanFixedFee : fixedFee
}

那么您可以像常规字段一样访问它:
println instance.fee

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

08-27 06:37