DIコンテナ

(2016/08/14)
  • Dependency Injection Container

  • PHP-DIがいいこと言ってて、インスタンス作成と依存性注入作業を全て巻き取るツール
  • IoCコンテナ (inversion of control)ともいう

  • 制御の反転という意味
  • なぜ反転なのかはこの文章読むとめっちゃ腑に落ちる
  • DIパターンを駆使するための実装パターン

  • 類似実装としてサービスロケータがある
  • この記事が非常に分かりやすい
  • PHPの代表的なもの
  • aura.di
  • 必要最低限機能をそろえた軽量DIコンテナ
  • シリアライズするので早いらしい
  • 程よく縛りがあるので学習するには一番良い気がする
  • コンテナロックの話や、サービスロケータとして使おうとするとメソッドが違うところとか
  • コンストラクタインジェクション、セッターインジェクションをサポート
  • pimple
  • シンプルなのが売り
  • 使用者に工夫が一任されてる感じ。本当に必要最低限
  • やり方次第ではコンストラクタインジェクションもセッターインジェクションも可能
  • サービスロケータとしても使えちゃう
  • Dice
  • 本体のコードが100行と、軽さを売りにしてる
  • autowritingが基本なのでpimpleとの違いはそこかな
  • コンストラクタインジェクション、セッターインジェクションをサポート
  • PHP-DI
  • フルスタックDIという感じ
  • 有名どころのFWのDIコンテナがこいつベースになってる
  • アノテーションによるフィールドインジェクションをサポート
  • Orno\Di
  • 古い。もう使わないほうがよさげ
  • 他との特徴はメソッドチェーンとMemcached(なぜか)でのキャッシュ対応くらい?
  • キャッシュはそんなに早くなると思えない…
  • Auryn
  • Symfony\Dependency-Injection
  • 様々な実装方法が存在する

  • コンストラクタインジェクション
  • コンストラクターに必要なインスタンスを渡す
  • インスタンス生成時に依存するものが揃ってる必要がある
  • セッターインジェクション
  • 依存性注入のためのセッターメソッドを用意する
  • setCache(Cache $cache) { $this->cache = $cache; } みたいな
  • 参考

  • https://www.sitepoint.com/php-dependency-injection-container-performance-benchmarks/
  • 有名どこのDIコンテナのベンチ比較
  • DI Dependency Injection

general(396)