目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「クラスの抽出」について書きます。
「クラスの抽出」 について
2つのクラスでなされるべき作業を1つのクラスで行なっている。
例
変更前
<?php
class Person
{
private $_name;
private $_officeAreaCode;
private $_officeNumber;
public function getName()
{
return $this->_name;
}
public function getTelephoneNumber()
{
return '(' . $this->_officeAreaCode . ')' . $this->_officeNumber;;
}
public function getOfficeAreaCode()
{
return $this->_officeAreaCode;
}
public function getOfficeNumber()
{
return $this->_officeNumber;
}
public function setOfficeAreaCode($arg)
{
$this->_officeAreaCode = $arg;
}
public function setOfficeNumber($arg)
{
$this->_officeNumber = $arg;
}
}
$p = new Person();
$p->setOfficeAreaCode('AreaCode');
$p->setOfficeNumber('xxxxx-xxxx-xxxx');
echo $p->getTelephoneNumber() . "\n";
変更後
<?php
class TelephoneNumber2 {
private $_number;
private $_areaCode;
public function getTelephoneNumber()
{
return '(' . $this->_areaCode . ')' . $this->_number;
}
public function getAreaCode()
{
return $this->_areaCode;
}
public function setAreacode($arg)
{
$this->_areacode = $arg;
}
public function getNumber()
{
return $this->_number;
}
public function setNumber($arg)
{
$this->_number = $arg;
}
}
class Person2
{
private $_name;
private $_officeTelephone;
public function __construct()
{
$this->_officeTelephone = new TelephoneNumber2();
}
public function getName()
{
return $this->_name;
}
public function getTelephoneNumber()
{
return $this->_officeTelephone->getTelephoneNumber();
}
public function getOfficeNumber()
{
$this->_officeTelephone->getNumber();
}
public function setOfficeNumber($arg)
{
$this->_officeTelephone->setNumber($arg);
}
public function setOfficeAreaCode($arg)
{
$this->_officeTelephone->setAreaCode($arg);
}
public function getOfficeAreaCode()
{
return $this->_officeTelephone->getAreaCode();
}
}
$p = new Person2();
$p->setOfficeAreaCode('AreaCode');
$p->setOfficeNumber('xxxxx-xxxx-xxxx');
echo $p->getTelephoneNumber() . "\n";