目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「メソッドによる引数の置き換え」について書きます。
「メソッドによる引数の置き換え」 について
あるオブジェクトがメソッドを呼び出し、その戻り値を別のメソッドの引数として渡している。受信側は、そのメソッドを呼び出し可能である。
もしメソッドが、引数で渡される値を別の方法で取得できるならば、そのように修正すべきです。
例
変更前
<?php
class Sample
{
private $_quantity;
private $_itemPrice;
public function __construct($quantity, $itemPrice)
{
$this->_quantity = $quantity;
$this->_itemPrice = $itemPrice;
}
public function getPrice()
{
$basePrice = $this->_quantity * $this->_itemPrice;
$discountLevel = 1;
if ($this->_quantity > 100) {
$discountLevel = 2;
}
return $this->discountedPrice($basePrice, $discountLevel);
}
private function discountedPrice($basePrice, $discountLevel)
{
if ($discountLevel === 2) {
return $basePrice * 0.1;
}
return $basePrice * 0.05;
}
}
$s = new Sample(10, 2000);
echo $s->getPrice() . "\n";
変更後
<?php
class Sample2
{
private $_quantity;
private $_itemPrice;
public function __construct($quantity, $itemPrice)
{
$this->_quantity = $quantity;
$this->_itemPrice = $itemPrice;
}
public function getPrice()
{
return $this->discountedPrice();
}
private function getBasePrice()
{
return $this->_quantity * $this->_itemPrice;
}
private function getDiscountLevel()
{
$discountLevel = 1;
if ($this->_quantity > 100) {
$discountLevel = 2;
}
return $discountLevel;
}
private function discountedPrice()
{
$basePrice = $this->getBasePrice();
if ($this->getDiscountLevel() === 2) {
return $basePrice * 0.1;
}
return $basePrice * 0.05;
}
}
$s = new Sample2(10, 2000);
echo $s->getPrice() . "\n";