我有一个场景,其中卖方配置了以下费用:
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
}
}
在这种情况下使用吸气剂方法是一种好习惯还是应该避免?
答案 0 :(得分:1)
用这种逻辑覆盖getter并不是一个好主意。在这种情况下,您应该控制每个getter的用法(例如json序列化或db模型映射等),因为如果需要在某个地方获取原始值可能会造成麻烦。
最好具有单独的calculateFee()方法
那瞬态场呢?
如果要在Groovy中创建没有实际字段的getter:
BigDecimal getFee(){
paidPlan ? paidPlanFixedFee : fixedFee
}
然后您可以像常规字段一样访问它:
println instance.fee
在这种情况下,您需要将fixedFee更改为引用了fixedFee的费用。但是更改之后,所有将来的修改将变得更加容易。