目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「オブジェクトによるデータ値の置き換え」について書きます。
「オブジェクトによるデータ値の置き換え」 について
追加のデータや振る舞いが必要なデータ項目がある。
例
変更前
<?php
class Order
{
private $_customer;
public function __construct($customer)
{
$this->_customer = $customer;
}
public function getCustomer()
{
return $this->_customer;
}
public function setCustomer($arg)
{
$this->_customer = $arg;
}
}
class Client
{
public static function numberOfOrdersFor($orders, $customer)
{
$result = 0;
foreach ($orders as $order) {
if ($order->getCustomer() === $customer) {
$result++;
}
}
return $result;
}
}
$orders = [
new Order('customer1'),
new Order('customer2'),
new Order('customer3'),
new Order('customer2'),
];
echo Client::numberOfOrdersFor($orders, 'customer2') . "\n";
変更後
<?php
class Customer2
{
private $_name;
public function __construct($name)
{
$this->_name = $name;
}
public function getName()
{
return $this->_name;
}
}
class Order2
{
/* @var Customer2 */
private $_customer;
public function __construct($customerName)
{
$this->_customer = new Customer2($customerName);
}
public function getCustomerName()
{
return $this->_customer->getName();
}
public function setCustomer($customerName)
{
$this->_customer = new Customer2($customerName);
}
}
class Client2
{
public static function numberOfOrdersFor($orders, $customer)
{
$result = 0;
foreach ($orders as $order) {
if ($order->getCustomerName() === $customer) {
$result++;
}
}
return $result;
}
}
$orders = [
new Order2('customer1'),
new Order2('customer2'),
new Order2('customer3'),
new Order2('customer2'),
];
echo Client2::numberOfOrdersFor($orders, 'customer2') . "\n";