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

マイクロサービスについて

マイクロサービスについて勉強したので少しメモを。 参考文献 Software Design 「2020年1月」 Contents1 マイクロサービスとは?1.1 具体例1.1.1 フロントエンドとバッ …

no image

emptyの扱いに関して

PHPで空白や存在確認として便利なemptyですが、乱用すると意図しない動きをすることがあるケースが多々あります。 Contents1 emptyの挙動に関して2 数値の03 検索などの全判定と値のな …

no image

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …

no image

命名規則について

リーダブルコードシリーズ第2段、名称について。 コードにおいては名称がとても大切で、正しい命名づけなどはなかなか難しいです。 以下に大事で重要だと思ったポイントを。 Contents1 具体的でわかり …

no image

オブジェクト指向設計 単一責任のクラスの設計

オブジェクト指向をするうえでの大事なポイントなど Contents1 単一責任のクラス設計1.1 メモ1.2 実際のコーディング上のコツ1.3 感想1.4 参考文献 単一責任のクラス設計 メモ 単一責 …