はじめに
Unityのチュートリアルプロジェクトを題材に、依存性の逆転(Dependency Inversion)について解説します。本記事では、基本的な概念から具体的なサンプルプロジェクトを用いた説明までを行います。
目次
依存性の逆転とは
E-Bookによる定義
依存性逆転の原則(DIP:Dependency Inversion Principle)とは、「上位のモジュールは下位のモジュールを直接インポートしてはならない。両者は抽象に依存するべきである」という原則です。
この定義だけでは少し分かりにくいかもしれません。簡単に言い換えると、
- 下位モジュールは変更されることが多いため、上位モジュールが直接依存すると影響を受けやすくなる。
- そこで、変更の少ない抽象(インターフェースなど)に依存することで、柔軟性と保守性を向上させる。
用語解説
モジュールとは?
モジュールとは、再利用可能な機能のまとまりのことを指します。
上位モジュールと下位モジュールとは?
- 上位モジュール:アプリケーションの主要な関心事(ダメージ計算など)を扱うモジュール。
- 下位モジュール:実装の詳細や変更される頻度の高い部分(UIなど)を担当するモジュール。
依存性の逆転の原則では、上位モジュールが下位モジュールに直接依存せず、抽象を介して依存することで、システムの柔軟性を高めます。
どんな場面で用いられる?
上位モジュールが下位モジュールを制御する際、直接下位モジュールに依存するのではなく、抽象に依存することで依存性の逆転を適用できる。
サンプルプロジェクトでの解説
悪い例(依存性の逆転が適用されていない場合)
この場合、上位モジュールである UnrefactoredSwitch
が、下位モジュールである UnrefactoredTrap
や UnrefactoredDoor
に直接依存しているため、下位モジュールの変更の影響を受けやすくなっています。
良い例(依存性の逆転を適用)
依存性の逆転を適用することで、Switch
は ISwitchable
(インターフェース)に依存し、具体的な Door
や Trap
に直接依存しなくなりました。
これにより、下位モジュールの変更の影響を受けにくくなり、システムの柔軟性が向上します。
まとめ
- 依存性の逆転の原則(DIP)は、上位モジュールが下位モジュールに直接依存せず、抽象に依存することでシステムの柔軟性を高める。
- 下位モジュールは変更されやすいため、直接依存を避けることで保守性が向上する。
- Unityプロジェクトでも、インターフェースや依存性注入を活用することで、DIPを適用できる。