技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

依存関係逆転の原則

オブジェクト指向の「依存関係逆転の原則 (Dependency Inversion Principle)」について簡単に纏めてみる。

 

例えば、パッケージAとパッケージBあり、パッケージAのクラスがパッケージBのクラスを使用しているとする。ここで、パッケージBの方が変更されることが多く、リビルドされることが多いとすると、通常、それに依存するパッケージAもその都度リビルドが必要になる。

そこで、パッケージB内のクラスのインタフェースをパッケージA側で持ち、パッケージB内のクラスはそのインタフェースを実装するよう設計する。こうすれば、そのインタフェースが変わらない限り、パッケージA側はパッケージB側の変更のたびにリビルドせずに済む。(型=クラスの情報としては、パッケージAはパッケージBに依存していないので。) 機能としては、パッケージAはパッケージBに依存したままだが、ビルドの際の依存関係については、パッケージBがパッケージAに依存するかたちになる。

 

いろいろ書いたがざっくり言うと、あまり変更されない方(パッケージA)が良く変更される方(パッケージB)のインタフェースを持って規定し、良く変更される方はそれに合わせて実装するというアーキテクチャにすると、開発の際にリビルドする回数が減らせるのではないか、ということ。