gpt4 book ai didi

java - 用查询替换 Temp

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:36 25 4
gpt4 key购买 nike

Replace Temp with Query 重构方法现在被广泛推荐,但是似乎效率很低, yield 很小。

Martin Fowler 网站的方法给出了以下示例:

将表达式提取到方法中。用表达式替换对 temp 的所有引用。然后可以将新方法用于其他方法。

    double basePrice = _quantity * _itemPrice;
if (basePrice > 1000)
return basePrice * 0.95;
else
return basePrice * 0.98;

成为

    if (basePrice() > 1000)
return basePrice() * 0.95;
else
return basePrice() * 0.98;


double basePrice() {
return _quantity * _itemPrice;
}

为什么这是个好主意?当然,这意味着不必要地重复计算,并且您有调用函数的开销。我知道 CPU 周期很便宜,但这样扔掉它们似乎很粗心?

我错过了什么吗?

最佳答案

这是一次重要的重构,因为它是针对单一职责的重构,它是 DRY 失败的解决方案!

temp 的主要问题(尤其是在使用长方法的原始代码中,长达数百行!)是它们是可变的本地状态。明显的风险(正如 Fowler 所讨论的那样?)是有人可能会在一个长方法的中途进行更改,并在最后破坏某些东西。 (看过这个费用)

没有测试,这个方法有无数的依赖——一团糟! :)

Remove temp 是关于重构为单一职责。

示例 - 今天我发现了一个错误,它与将错误的临时变量传递到服务有关。如果我删除临时工(有几个,所有字符串),那个错误(疏忽)就不会发生。

我的方法持有一个临时变量的原因是它正在做它不应该做的工作......并且这个逻辑被类似的类重复......它是否一致?不!

通过删除 temp,我还将代码重构为一个具有适当责任的类,可以通过一些简单的测试来覆盖 110%。

没有巨大的夹具来测试一些琐碎的事情

如果我调用昂贵的东西,我会将结果作为值对象/聚合返回。 “临时代码”可能应该由聚合内部化。

因此,删除 temp 会将您推向集中(单一)职责 -> SOLID!

关于java - 用查询替换 Temp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/320946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com