昔はようわからなかったabstract(継承全般)、interface、traitの使い分けなどについて。
今の現場でいろいろと考えることがあり、自分なりにいろんな方の知見を共有できたので、メモしておこうと思います。
abstract(継承全般)
いわゆる継承ですね。abstractのこともあれば、単純にextendsの継承を使う場合もあります。
使うケースとしては、以下のようなケースですね。
- 親と子に関してプログラムの骨組みそのものが近いこと(語彙力なくてなかなか良い言葉が思い浮かばない。。。)
- abstractを使う場合については子で分岐させるような処理がある場合(ifつかうより、子供で処理を分岐させた方が良い)
interface
abstractとの使い分けが一時不明瞭でした。
自分の中では以下のように考えてます。
- 親子関係などがあるかどうか(プログラム全体の主従関係)は関係ない
- あくまでメソッド名と引数と戻り値の型を統一させたい場合に使う
単純なモデルなんかで従属関係はないんだけど、便宜上、メソッドと引数、戻り値を統一させたい場合に使うなんてケースがありました。
trait
直近プロジェクトでちょこちょこ使いました。
- 継承するほどではないけど、一部汎用的なメソッドを使いたい
- ワンポイント的な形のメソッドなどで使われることが多い
意外にうまく使えるケースが多く、なかなかつかいどころいかんによっては効果を発揮してくれます。