Laravel4、IoCを使ったお手軽なクラスの置き換え
ベータをいじり、あちこち上手く行かないまま、時間ばかり食われています。手を出すとやけどするぞと思いながら、それを楽しんでおります。
さて、前回はコンストラクタを使った依存の注入がLaravel4でサポートされてるというお話でしたが、IoCでもっとお手軽に、本番用のクラスからテスト用のクラスに置き換えられるようになるよというお話です。
一般的にクラスのインスタンスを生成するときは:
$instance = new Sakura;
ですが、これをIoCを使用するように書きます。
$instance = app::make('Sakura');
これだけで、事前登録しなくても、Sakuraクラスのインスタンスが生成されます。
これだけでは面白くありませんね。このSakuraクラスを別のクラスに置き換えたい時、例えばテストだとか、仕様変更だとかの場合です。そんな時、直接コードを書き換えず、Sakuraクラスを置き換えられます。
明示的に”Sakura"に対して、別のクラスを置き換えてあげるだけです。
App::bind('Sakura', 'Ume');
App::bind()
で明示的に登録名に具体的なクラスを結びつけていない場合は、その登録名と同じ名前のクラスが生成され、登録名にクラスが結び付けられた場合は、そのクラスが生成されます。
本格的にコンストラクタを使った依存の注入と解決を採用するも良し、クラスの置き換えを利用して、手軽にテストするも良し、テストなんぞ考えず高速スクラッチ開発に邁進するも良し。使える幅が広がります。