明示的なメソッド群による引数の置き換え (リファクタリング-p285)
リファクタリング
Published: 2019-03-04

目的

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

今回は「明示的なメソッド群による引数の置き換え」について書きます。

「明示的なメソッド群による引数の置き換え」 について

引数の特定の値によって異なるコードが実行されるメソッドがある。

引数の値に対応する別々のメソッドを作成する

変更前

<?php

class Engineer extends Employee
{
    public function __consturct() {}
}

class Employee
{
    const ENGINEER = 0;
    const SALESMAN = 1;
    const MANAGER = 2;

    public static function create($type)
    {
        switch ($type) {
            case self::ENGINEER:
                return new Engineer();
            case self::SALESMAN:
                return new Salesman();
            case self::MANAGER:
                return new Manager();
        }

        throw new Exception('不正なタイプコード');
    }
}

$e = Employee::create(0);
echo get_class($e) . "\n";

変更後

<?php

class Employee2
{
    const ENGINEER = 0;
    const SALESMAN = 1;
    const MANAGER = 2;

    public static function createEngineer()
    {
        return new Engineer();
    }
}

$e = Employee2::createEngineer();
echo get_class($e) . "\n";