skillup

技術ブログ

アーキテクト設計全般

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

投稿日:2020年5月25日 更新日:

今までも何度かやった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

オブジェクト指向 アプリケーション層に関して

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にアプリケーション層(以下AP層)。MVCモデルでいうところのコントローラーに近い?)の考え方について。 Contents1 …

no image

オブジェクト指向 クラスの設計と業務ロジックの整理

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にクラスの作り方について。 Contents1 クラス設計と業務ロジック1.1 要点1.2 感想 クラス設計と業務ロジック …

no image

event-listenerについて

前回Observeパターンに触れましたが、少し似たパターンとしてevent-listenerを使ったパターンが存在します。 Model(Eloquentのフック)というのが大まかな共通項ですかね。 そ …

no image

型の意識について(ValueObjectの活用など)

現在の現場でコードレビューをしてもらう機会が増え、自分が弱かった型の意識について。 現在ではPHPでも型を記述してコーディングすることが一般的なため、静的言語と同じように型を意識することが増えてきたか …

no image

APIに関して

RESTAPIのルーティングで気をつけることなんぞを。 直近のプロジェクトではRESTAPIを作ることが多かったんですが気をつけることなんぞを。 Contents1 仕様書はソースから2 ツール3 命 …

アーカイブ