創屋ぷれす

DI(依存性注入)

DI(依存性注入)とは,
システムを作る際のデザインパターンの1つです.

あるオブジェクトAとオブジェクトBがあった際に,
Aの中の処理でBのオブジェクトを作成し処理を使用する場合,AはBに依存している,と言えます.

この作りの場合,以下のようなデメリットがあります.
・Aの処理の単体テストがにしくい(Bの振る舞いをコントロールしにくいため)
・AがBに依存しているということが隠れるため,影響範囲が分かりにくくなりメンテナンス性が落ちる

これを解決するためのDIです.
DIでは,依存する処理(オブジェクト)を注入(引数で渡す,プロパティとして設定)します.
→ 一般的には引数でオブジェクトを渡すようです.
これにより,先ほど書いたデメリットを解消することができます.
単体テストの際に期待する処理をするようにBを調整してAに渡すことができるので,テストが容易になります.
また,IFとしてBが現れてくるので依存関係が分かりやすくなります.

複数のオブジェクトに依存している場合,
呼び出しの際のオブジェクト生成処理,引数として渡す処理の記載が煩雑になることが考えられます.
こういうときのために,DIコンテナという仕組みが容易されています.
この仕組みを使用すると予め関数と必要な引数を登録しておくと,呼び出し時に自動でオブジェクト作成+引数として設定してくれる,
という便利なものです.
DIを採用する場合は,DIコンテナも使用するのが一般的ですかね.

情報が多いのはC#やJavaですが,たいていの言語で実現できるようです.
(3rdパーティのライブラリ含めて)
是非採用してみてください.

創屋のホームページはこちらから

Comments are closed.