目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「フィールドの移動」について書きます。
「フィールドの移動」 について
クラス間で状態や振る舞いを移動するのは、リファクタリングの本質です。
フィールドを移動することを考えるのは、そのクラスのメソッドよりも別クラスのメソッドの方がそのフィールドを多く使っているのがわかったときです。
例
変更前
<?php
class AccountType
{
}
class Account
{
private $_type;
private $_interestRate;
public function __construct(AccountType $type, $interestRate)
{
$this->_type = $type;
$this->_interestRate = $interestRate;
}
public function interestForAmountDays($amount, $days)
{
return $this->_interestRate * $amount * $days / 365;
}
}
$at = new AccountType();
$a = new Account($at, 0.03);
echo $a->interestForAmountDays(20000, 120) . "\n";
変更後
<?php
class AccountType2
{
private $_interestRate;
public function setInterestRate($arg)
{
$this->_interestRate = $arg;
}
public function getInterestRate()
{
return $this->_interestRate;
}
}
class Account2
{
private $_type;
public function __construct(AccountType2 $type)
{
$this->_type = $type;
}
public function interestForAmountDays($amount, $days)
{
return $this->_type->getInterestRate() * $amount * $days / 365;
}
}
$at = new AccountType2();
$at->setInterestRate(0.03);
$a = new Account2($at);
echo $a->interestForAmountDays(20000, 120) . "\n";