目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「外部メソッドの導入」について書きます。
例
変更前
<?php
date_default_timezone_set('Asia/Tokyo');
// サーバー側のコードという想定
class PreviousEnd
{
private $_year;
private $_month;
private $_date;
public function __construct($datetime)
{
$this->_year = $datetime->format('Y');
$this->_month = $datetime->format('m');
$this->_date = $datetime->format('d');
}
public function getYear()
{
return $this->_year;
}
public function getMonth()
{
return $this->_month;
}
public function getDate()
{
return $this->_date;
}
}
// クライアント側
$targetDate = '2018/10/11';
$previousEnd = new PreviousEnd(new DateTime($targetDate));
$newStart = (new DateTime($targetDate))->setDate(
$previousEnd->getYear(),
$previousEnd->getMonth(),
$previousEnd->getDate() + 1
);
echo $newStart->format('Y/m/d') . "\n";
// 本来はサーバー側のコードを修正したい
変更後
<?php
date_default_timezone_set('Asia/Tokyo');
// サーバー側のコードという想定
class PreviousEnd
{
private $_year;
private $_month;
private $_date;
public function __construct($datetime)
{
$this->_year = $datetime->format('Y');
$this->_month = $datetime->format('m');
$this->_date = $datetime->format('d');
}
public function getYear()
{
return $this->_year;
}
public function getMonth()
{
return $this->_month;
}
public function getDate()
{
return $this->_date;
}
}
$targetDate = '2018/10/11';
$previousEnd = new PreviousEnd(new DateTime($targetDate));
$newStart = nextDay($targetDate, $previousEnd);
function nextDay($targetDate, $arg)
{
return (new DateTime($targetDate))->setDate(
$arg->getYear(),
$arg->getMonth(),
$arg->getDate() + 1
);
}
echo $newStart->format('Y/m/d') . "\n";