generated at
依存関係逆転の原則 (DIP)
Dependency Inversion Principle, DIP
SOLIDのD
不安定なもの→安定なもの という依存関係を保つための手段の一つ
具象A→具象Bという依存関係に抽象を挟むことで
具象A→Interface←具象Bとできる
これの嬉しさは後述
AbstractFactoryパターンを使うことで実現できる


前提として、依存するものは抽象でありたい、というのがある
抽象は安定していて、具象は不安定
Interfaceは修正されづらいものという前提がある
不安定なものに依存すると、変更された時に他の場所にも影響が及ぶ
最高に非現実的な理想を言えば、モジュールたちは全て抽象のみに依存したい
極論を言えばインスタンスを作るときも参照したくない
が、実際問題無理なので、以下のように言い換える
「変化しやすい具象要素に依存しないようにしたい」



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


参考