タイプヒンティングからのインジェクションとインターフェースの続き
コメントが長くなるとみにくい・・。
レスの続き。
最近はタイプヒンティング自体ほとんど利用価値がないような気がして仕方がありません……。
私はアクションクラスでよく使ってるんですよね。
例えば
<?php class ShowMembers{ public $MEMBERS; public function execute(User $user, MemberDataIterator $iterator){ if ($user->isManager()){ $this->MEMBERS = $iterator; return 'success'; }else{ return 'error'; } } } ?>
みたいな感じで。設定ファイルもアノテーションも必要ないのは結構すっきりすると思います。
で、さっき書いた内容について。
コンポーネントのメソッド引数のオブジェクトで、自動設定したい場合と手動設定したい場合が重なることはあるんだろうか?
テストやモックを使いたいときは、テストやモッククラスを同じクラス名で作成して、テスト用のディレクトリに配置し、include_pathの優先を上げればいいんじゃないだろうか。
モックを使うような本格的な開発をやったことがないので何とも言えないが・・。
それ以外でインターフェースを使いつつ自動設定したい場面・・特に思い付かない。
というわけでタイプヒンティングからのインジェクションは問題だと思ったんだけど、問題になる具体的な例が出てこないのでこのまま使い続けようかなと。
ああ、、ひとつ問題があった。
コンポーネント名とクラス名が異なる場合はインジェクションできない。
設定ファイルを書かない場合はクラス名=コンポーネント名になるようにしているので今のところ不都合はない(大抵の場合は設定ファイルを書かないので)。
後で混乱しないためにコンポーネント名=クラス名に統一した方がいいのかな・・。しかし同じクラスを使って複数のコンポーネント名として登録したい場面があった気がする。dsnを変えて複数のDBに接続したい場合など。その場合は
<?php class HogeDao extends Dao{} class FugaDao extends Dao{} ?>
; HogeDao.ini dsn = sqlite:hoge.db ; FugaDao.ini dsn = sqlite:fuga.db
とやっている・・。
タイプヒンティングを使っていない頃は設定ファイルを書くだけで良かったのが、今は設定ファイル+空のクラス(?)が必要になった。
その分役割は明確になったんだけど・・こういう作りはアリなのかよく分からない。