継承による委譲の置き換え (リファクタリング-p355)
リファクタリング
Published: 2019-03-20

目的

「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。

今回は「継承による委譲の置き換え」について書きます。

「継承による委譲の置き換え」 について

データの共有は継承では変換できない責任です。

変更前

<?php

class Employee
{
    /* @var Person */
    private $_person;

    public function __construct()
    {
        $this->_person = new Person();
    }

    public function getName()
    {
        return $this->_person->getName();
    }

    public function setName($arg)
    {
        $this->_person->setName($arg);
    }

    public function toString()
    {
        return 'Emp: ' . $this->_person->getLastName();
    }
}

class Person
{
    private $_name;

    public function getName()
    {
        return $this->_name;
    }

    public function setName($arg)
    {
        $this->_name = $arg;
    }

    public function getLastName()
    {
        return 'getLastName';
    }
}

$e = new Employee();
$e->setName('namename');
echo $e->getName() . "\n";
echo $e->toString() . "\n";

変更後

<?php

class Employee2 extends Person2
{
    public function toString()
    {
        return 'Emp: ' . $this->getLastName();
    }
}

class Person2
{
    private $_name;

    public function getName()
    {
        return $this->_name;
    }

    public function setName($arg)
    {
        $this->_name = $arg;
    }

    public function getLastName()
    {
        return 'getLastName';
    }
}

$e = new Employee2();
$e->setName('namename');
echo $e->getName() . "\n";
echo $e->toString() . "\n";