DIP(Dependency Inversion Principle)とか静的メソッドとか
#技術
当たり前といえば当たり前の話を書いていく。
いつでもInterface切って「抽象に依存させる」「依存の向きを逆転させる」のが有効なわけではなくて、むしろ必要な依存として内部的にnewした方がいい場面もある。例えば、本質的にそのインスタンスの生成がそのクラスの責務である場合とか。
なんでこういうこと書いているかと言うと、「newはダメ」くらいで覚えている人をちょいちょい見かけるから。ほとんどのオブジェクト指向言語において論理的に成り立たない立場だし、少々強い言葉で言えば思考停止だよね、と。
結局どこかで生成は書かれる。良くないnewについては単にダメというのではなく、例えば「外部注入(DI・オートワイヤリング)した方が変更容易性やテスタビリティが上がるよ」という形で指摘するのが良い。
PHPにおける静的メソッドも賛否両論あるけれど、あれって最近のJSみたいなモジュールシステムの言語で関数をimportしているのとあまり変わらないはずで、要は使い方なのではと。まあ綺麗に概念整理できなくて気持ち悪いのはわかる。
静的呼び出し→任意の操作→インスタンス自己生成みたいなメソッドなら一貫性が認められそう。例えばLaravelのEloquentのfindとかは、(DBをいったん気にしないで解釈すれば)インスタンスの自己生成機能の呼び出しと認識できる。