圣诞大减价开始了!

将参数替换为方法调用

问题

调用查询方法并将其结果作为另一个方法的参数传递,而该方法可以直接调用查询。

解决方案

与其通过参数传递值,不如尝试在方法体中放置查询调用。

之前
int basePrice =数量* itemPrice;double seasonDiscount = this.getSeasonalDiscount();double fees = this.getFees();double finalPrice =折扣价格(basePrice,季节性折扣,费用);
int basePrice =数量* itemPrice;double finalPrice =折扣价格(basePrice);
之前
int basePrice =数量* itemPrice;double seasonDiscount = this.GetSeasonalDiscount();double fees = this.GetFees();double finalPrice =折扣价格(basePrice,季节性折扣,费用);
int basePrice =数量* itemPrice;double finalPrice =折扣价(basePrice);
之前
$basePrice = $this->quantity * $this->itemPrice;$季节性折扣= $this->getSeasonalDiscount();$fees = $this->getFees();$finalPrice = $this->折扣价格($basePrice, $seasonDiscount, $fees);
$basePrice = $this->quantity * $this->itemPrice;$finalPrice = $this->折扣价格($basePrice);
之前
basePrice = quantity * itemPrice seasonalDiscount = self.getSeasonalDiscount() fees = self.getFees() finalPrice = discount price (basePrice, seasonalDiscount, fees)
basePrice =数量* itemPrice finalPrice =折扣价格(basePrice)
之前
let basePrice = quantity * itemPrice;const seasonDiscount = this.getSeasonalDiscount();const fees = this.getFees();const finalPrice =折扣价格(basePrice,季节性折扣,费用);
let basePrice = quantity * itemPrice;let finalPrice = discount price (basePrice);

为什么重构

一长串的参数很难理解。此外,对此类方法的调用通常类似于一系列级联,具有难以导航的令人兴奋的值计算,但必须传递给该方法。因此,如果一个参数值可以在方法的帮助下计算,那么在方法本身内部进行计算,并去掉参数。

好处

  • 我们去掉了不需要的参数并简化了方法调用。这样的参数通常不是为现在的项目创建的,而是考虑到未来可能永远不会出现的需求。

缺点

  • 明天你可能会因为其他需要用到这个参数…让你重写方法。

如何重构

  1. 确保获取值的代码不使用来自当前方法的参数,因为它们在另一个方法中不可用。如果是这样,则不可能移动代码。

  2. 如果相关代码比单个方法或函数调用更复杂,请使用提取方法在新方法中隔离此代码并使调用简单。

  3. 在主方法的代码中,将对要替换的参数的所有引用替换为对获取该值的方法的调用。

  4. 使用删除参数消除现在不使用的参数。

Baidu
map