依存性反転の原則(DIP)
依存性反転の原則とは
- 上位のモジュールは下位のモジュールに依存してはならない。どちらのモジュールも「抽象」に依存するべきである。
- 「抽象」は実装の詳細に依存してはならない。実装の詳細が「抽象」に依存するべきである
上位モジュールに依存しない場合のメリットとして、
- ユニットテストがしやすい。
- 別の実装に入れ替えやすい(再利用性が高い)
パターン
- Poor Man's Dependency Injection
- IoCコンテナ(制御の反転)
- DIコンテナで依存関係のクラスの認識を自動で行う。
- Registerでリストに具象クラス追加
- Resolveでリスト内の具象クラスをインターフェースの継承先として自動で判別させる。
- Releaseでインスタンス開放
- Disposeはアプリケーション終了時に呼ばれる
- DIコンテナで依存関係のクラスの認識を自動で行う。
- 宣言型の登録
- Service Locatorアンチパターン
- Illegitimate Injectionアンチパターン
- 規約手法
結論
結局は、他の原則で作成したインターフェースの実体をどこで作るかという話。
簡単なソフトウェアなら、「PoorMan'sDI」を使用し、複雑でインスタンスが増大しているソフトウェアなら「規約」
を使用すれば良い。