【設計】依存関係について

はじめに

今回は依存関係について書いていきます。
複数のオブジェクトが存在し、オブジェクトを参照するような処理を書くと依存関係が発生します。依存が複雑に絡み合うことで、1つを変更すると他のところにまで影響するような変更が難しい状態になります。
そのような状態にならないように依存を調整するようにする必要があります。

依存の問題点について

依存関係の問題の一つに、変更の可能性がある技術のコードを使用箇所にそのまま実装していることが挙げられます。
以下のようにデータを取得する場合、複数の技術から選択できます。

データ取得の技術

  • MySQL

  • PostgreSQL

  • メモリ

データを取得するための技術をMySQLに決めて、MySQLを使用したコードをクラスに書いて、そのクラスを全体で使用するようにするとデータ取得はMySQLに依存したものになります。
テストを行うときにメモリなどを使用したテストが行えなくなり、テストを行うときにもDBを用意するところから始まるようになります。

依存関係逆転の法則

テスト時にDBを用意するところからしなくていいように、インターフェースに依存するよう実装します。
具体的な技術に依存したコードはインターフェースを実装したクラスに書くようにします。
本番ではMySQLを利用したデータ取得クラス、テストなどを行うときは、メモリを利用したデータ取得クラスのようにクラスを差し替えることが可能になります。
このようにインターフェースなどの抽象に依存させる制御を「依存関係逆転の原則」といいます。

依存関係逆転の法則の定義
・ 上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方とも抽象(例としてインターフェース)に依存するべきである。
・ 抽象は詳細に依存してはならない。詳細(具象的な実装内容)が抽象に依存するべきである。

引用URL: wikipedia

おわりに

今回は依存関係について書いていきました。
依存関係逆転の法則を適用することで、テストやDB変更時にデータ取得処理の書き直す箇所が少なくなります。
次回は使用する技術の切り替えを行う方法・パターンについて書いていきたいと思います。

この記事が気に入ったらサポートをしてみませんか?