我有一种情况,其中卖方配置了以下费用:
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的费用。但是更改之后,所有将来的修改将变得更加容易。