skillup

技術ブログ

プログラミング全般

DIとDIコンテナについて再考

投稿日:

今までも何度かやったDI(Dependency Injection = 依存性の注入)について。

以前のリンク

PHPにおけるDI

スコープアノテーションとCDIについて

DIとはシンプルに言うと?

あるプログラムとあるプログラムを疎結合にしておき(切り離し)、外部から入力可能にしておくこと(これを注入などと言っています。)

だと解釈しています。

具体的に例をみていこうと思います。

サンプルコードと解説

Pet.php

Cat.php

Dog.php

Animal.php

上記の $animal = new Animal(new Dog('pochi'));の部分が依存性(AnimalはDogに依存しています)を注入していることになります。

プログラムをこのように書くことによってインスタンスの生成部分が仮にnew Cat(‘tama’) になってもAnimalには一切影響がありません。

もしこう言った考えがなく、Animalの中でDogやCatを生成していた場合、変更がききません。

DIコンテナとは?

上記のような非常に簡単な例だった場合はいいのですが、クラスが何十にもあった場合は、このような注入作業が大変になります。

Animalの引数がめちゃくちゃいっぱいになっちゃいますよね・・・・

この場合、Animalとサブクラス群(DogやCat)を結びつける専用の仕組みが必要になります。

それがDIコンテナと言われるものです。

サンプルコードと解説

PHPではpimpleと言うシンプルなDIコンテナが使えます。

https://pimple.symfony.com/

di_config.php

Animal.php

上記のようにプログラムを作っておくことで、変更があってもdi_config.phpのみに集中し、Animal.phpに変更が少ないないことが特徴です。

https://github.com/umanari145/phptips/tree/master/di/type2

参考リンク

DIとは?DIコンテナとは?試してみた(後編)[PHP][Pimple][DI]

DI・DIコンテナ、ちゃんと理解出来てる・・?

PHPでDIをやる(pimple)

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

シェルの基礎+ユーザー切り替え関連

雑誌を見ていたらシェルの特集があったので、ちょっとメモリます。 補強したいところのみ要点をチェック。 Contents0.1 実行パスについて0.2 ビルドインコマンド0.3 シェル変数・環境変数0. …

no image

テスト項目の作り方

テスト項目の作り方について。 単体テスト書のレビューをしていて、なるべく効率的に網羅的にできるテスト仕様書の作成について。 納品物としてではなく、開発の高速化と品質をあげるためのテスト仕様書を。 Co …

no image

オブジェクト指向設計 柔軟なインターフェイス

オブジェクト指向シリーズ。今回はインターフェイスについて。 インターフェイスといっても、implementsを使った実装だけではなく、要はあるクラスが外部の窓口となるときに使うメソッドってことだと思う …

no image

便利すぎる道具の弊害

現在、Javaのプロジェクトでは会社でNetbeansを使っていますが、IDEを使っているばっかりに理解できていないところがありました。便利すぎる道具の弊害ですね・・・ IDEについて一応説明をしてお …

no image

テストのダミーデータ作成

データベースに大量のデータを作りたいときにいつもあああやhoge,aaaですとデータという感じがしないですし、抽出や集計ができません。 なるべく自然に近いデータが欲しいのですが、簡単に作れる方法があり …