依存関係逆転の原則 (DIP)
Dependency Inversion Principle, DIP
不安定なもの→安定なもの
という依存関係を保つための手段の一つ
具象A→Interface←具象Bとできる
これの嬉しさは後述
前提として、依存するものは抽象でありたい、というのがある
抽象は安定していて、具象は不安定
Interfaceは修正されづらいものという前提がある
不安定なものに依存すると、変更された時に他の場所にも影響が及ぶ
最高に非現実的な理想を言えば、モジュールたちは全て抽象のみに依存したい
極論を言えばインスタンスを作るときも参照したくない
が、実際問題無理なので、以下のように言い換える
「変化しやすい具象要素に依存しないようにしたい」
依存関係を逆転することの何が嬉しいか
思うに、

の11章を読むだけでは理解できない
前提がこの章には書かれていないから
サービスを作る上でのパーツを分けて、
依存関係を「外側→内側」にしたい
これを実現するためにDIPみたいな原則がある
具体例
レイヤー的にはこうしたい
しかし、どうしてもこうなっちゃうことはよくある
A, B, Cは具象クラス
こうなると、そもそも目指していたレイヤーごとの依存関係が崩れる
レイヤーごとの依存関係自体は本質ではない
なので、これを回避したい
ここで、DIPを用いる
内側にInterfaceを用意することで「内」と「外」の依存関係が逆転する
こうすることで、実装も実現し、依存関係の秩序も保たれる
不安定な外側に修正があったとしても、内側に影響はない
これ
B → <I>
なはずなので、図が間違ってるな

参考