interfaceを用いいて抽象化するのは何がいい??

今回はオブジェクト思考について学びました。 前職でrepositoryパターンを用いて永久層の分離をおこなっていました。 その際に、interfaceを用いて抽象化しそれ、具象化して実際のやりたい処理を記述していました。 その時は機械的にinterfaceを用いていました。 今回、interfaceを用いて抽象化することは何がメリットがあるのか?と考えました。 キーワードはポリモフィズムかなと思います。

例えば、システムに出てきそうな、〜区分を表す様なものがあるとします。 その区分を示すロジックを元に、あれやこれや処理を行いたい場合、大抵if文やswitch分を用いて処理を記述してしまうのではないでしょうか。 これらの処理群は何らかのアクション(処理)と紐付いており密結合になりやすく、ロジックが散財し保守性が低下する要因になるよ考えます。 これらの、複雑な条件分岐を排除し尚且つ疎結合にコードを管理したい場合のテクニックに使用できると思いました。下記の様なコードがあります。(クラス、メソッドの命名にご愛嬌で) 例えば、大人料金、子供料金の区分があったとします。それを interfaceで抽象化を行うことで、大人料金、子供料金の振る舞いを分けることに成功しました。 Fee抽象化することで、さまざまなタイプを具象化することができました。(ポリモフィズム)

<?php
interface Fee {
    public function yen();
    
    public function label();
}

class AdultFee implements Fee {
    public function yen() {
        return 1000;
    }
    
    public function label() {
        return 'adult';
    }
}

class ChildFee {
    public function yen() {
        return 500;
    }
    
    public function label() {
        return 'child';
    }
}

class Test {
    private Fee $fee;
    
    public function __construct(Fee $fee) {
        $this->fee = $fee;
    }
    
    public function status() {
        return $this->fee->label();
    }
}

$test = new Test(new AdultFee);
var_dump($test->status());

上記のコードから分かるように、Testクラスは特にFeeの振る舞いを気にせずとも使用ができます。 TestクラスがFeeに対すつ関心ごとを考えなくなり、疎結合なクラス間になったと思います。 こうすることで必要なパーツを生成しつつ実際のロジック自体は具象化クラスに閉じ込めることができるメリットがあり、保守も容易になると考えました。

本日はここまで〜 参考になった、本を載せておきます〜 ではまた〜

俺SREエンジニアなんだけどな・・ 早く、監視の勉強しなきゃ・・