traitを書きながらふと、
コレtrait使う必要あるんか...
今の自分の想定する使い方なら、委譲すればいいんちゃうの?
となった
使いたい処理を簡単にuseすれば使えるし、必要な処理だけ追加出来るってのは良いんだけど、それは委譲でも実現できちゃうなという域を出なかった。
traitを使うとuseしているtraitが持っている処理全体を把握する必要があるし、他のtraitの中身も意識しないといけない。他のtraitの処理を使う(けどどのtaritを使うかは自由)ような処理を書いちゃうと依存が発生しちゃうし、名前の衝突とか気にしだすと関数名を付けるときも冗長になりかねない。
# traitだと両方使いたい時は名前がぶつからないように気をつけないといけない
self::B_login();
self::A_login();
# 委譲したクラスメソッドを使うならそんなこと気にしなくていい
A::login();
B::login():
いずれもドキュメントとかチーム無いの意思疎通ができていれば回避出来る問題かもしれないけど、そこにコストを払うのもどこか本末転倒な感じがする。
traitは多重継承のようなもの(?)なのだし、そもそも継承より委譲のはずだ。