目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「局所的拡張の導入」について書きます。
「局所的拡張の導入」 について
それらの追加されるメソッドを備えた新たなクラスを作る。この拡張クラスは、元のクラスのサブクラスまたはラッパーである。
例
変更前
<?php
date_default_timezone_set('Asia/Tokyo');
class Client
{
public static function test()
{
$dt = new DateTime('2018/10/14');
$nextDay = self::nextDay($dt);
echo $nextDay->format('Y/m/d') . "\n";
}
private static function nextDay(DateTime $datetime)
{
return $datetime->modify('+1 days');
}
}
Client::test();
変更後
<?php
date_default_timezone_set('Asia/Tokyo');
// サブクラスを使う場合
class MfDateSub2 extends DateTime
{
public function nextDay()
{
return $this->modify('+1 days');
}
}
class Client2
{
public static function test()
{
$dt = new MfDateSub2('2018/10/14');
echo $dt->nextDay()->format('Y/m/d') . "\n";
}
}
Client2::test();
echo '---' . "\n";
// 委譲を使う場合
class Client3
{
public static function test()
{
$dt = new DateTime('2018/10/14');
$mdw = new MfDateWrap3($dt);
echo $mdw->nextDay()->format('Y/m/d') . "\n";
}
}
class MfDateWrap3
{
/* @var DateTime */
private $_original;
public function __construct(DateTime $arg)
{
$this->_original = $arg;
}
public function nextDay()
{
return $this->_original->modify('+1 days');
}
}
Client3::test();