日報:2019/12/18

今日の出来事

  • お仕事
  • デザパタについてフィードバックをもらった

所感

お仕事

2ヶ月ぐらいのビッグタスクが終わった♪

thinkami.hatenablog.com

デザパタについてフィードバックをもらった。

確かに。

いけてない点 1

リモコンの操作でいうとこれです。 前進の処理。

public function send_forward()
{
    $this->get_relate_radio_control_car()->forward();
}

また、 get_relate_radio_control_car は こんな定義でした。

public function get_relate_radio_control_car()
{
    return new TakaraTommyRadioControlCar();
}

つまり send_forward を呼ぶ度に TakaraTommyRadioControlCar()インスタンスが生成されてしまいます。

修正点 1

public function __construct()
{
    $this->radio_controller = new TakaraTommyRadioControlCar();
}

public function send_forward()
{
    $this->radio_controller->forward();
}

シングルトンてきな感じで実装を行いました。

いけてない点 2

interface で定義を強制するけど使ってなかった。

修正点 2

DI的な感じで リモコンのコンストラクタに ラジコンのインスタンスを差し込むようにした。

class TakaraTommyRemoteController implements RemoteControllerInterface
{
    /** @var TakaraTommyRadioControlCar */
    private $radio_controller;

    public function __construct($radio_controller) {
        $this->radio_controller = $radio_controller;
    }

    /* 略 */
}

class TakaraTommyRadioControllerFactory implements RadioControllerFactoryInterface
{
    public function create_remote_controller()
    {
        return new TakaraTommyRemoteController($this->create_radio_controller());
    }

    public function create_radio_controller()
    {
        return new TakaraTommyRadioControlCar();
    }
}

これやったら、大分依存が減って良くなった感がある。

いけてない点 3

ここがなー、結構難しくて 未だに 「お、これだ!!」 ってのに至ってない。

修正点 3

リモコンにラジコンを setするのを責務にしたクラス を作ってみた。

class TakaraTommyRemoteController implements RemoteControllerInterface
{
    private $radio_controller;

    public function __construct($remote_communicate_tip_factory)
    {
        $this->radio_controller = $remote_communicate_tip_factory->create_relate_radio_controller();
    }

    /* 略 */
}


/**
 * リモコンとラジコンとの通信用のチップ
 * Interface RemoteCommunicateTipFactoryInterface
 */
interface RemoteCommunicateTipFactoryInterface
{
    /**
     * @return RadioControlCarInterface
     */
    public function create_relate_radio_controller();
}

class TakaraTommyRemoteCommunicateTipFactory implements RemoteCommunicateTipFactoryInterface
{
    public function create_relate_radio_controller()
    {
        return new TakaraTommyRadioControlCar();
    }
}

これで正しいのか・・?

むずいなー。 これは経験を積んでく、いわゆる 量が質に転換する、って所だとは思うけれど。。 でも、本当フィードバックありがたすぎた。

最終型はこれです。

gist.github.com