将参数替换为方法调用
问题
调用查询方法并将其结果作为另一个方法的参数传递,而该方法可以直接调用查询。
解决方案
与其通过参数传递值,不如尝试在方法体中放置查询调用。
之前
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);
为什么重构
一长串的参数很难理解。此外,对此类方法的调用通常类似于一系列级联,具有难以导航的令人兴奋的值计算,但必须传递给该方法。因此,如果一个参数值可以在方法的帮助下计算,那么在方法本身内部进行计算,并去掉参数。
好处
- 我们去掉了不需要的参数并简化了方法调用。这样的参数通常不是为现在的项目创建的,而是考虑到未来可能永远不会出现的需求。
缺点
- 明天你可能会因为其他需要用到这个参数…让你重写方法。