Categories
リファクタリング

依存性の逆転の原則

 依存性逆転の原則(Dependency Inversion Principle、DIP)は、高水準のモジュールは低水準のモジュールに依存すべきではなく、どちらも抽象に依存すべきだと述べています。また、抽象は詳細に依存すべきでなく、詳細が抽象に依存すべきであるとも言います。

DIPの基本的な概念は以下のようにまとめられます:

  • 高水準のモジュール(例: 抽象クラスやインターフェース)は、低水準のモジュールに依存してはならない。どちらも抽象に依存すべきである。
  • 抽象は詳細に依存してはならない。詳細が抽象に依存すべきである。

これにより、柔軟性が向上し、システム全体が変更に対してより堅牢で拡張可能になります。

DIPを守らない設計例

この例では、Switch クラスが LightBulb クラスに直接依存しており、依存性逆転の原則に反しています。高水準のモジュールである Switch が低水準のモジュールである LightBulb に直接依存しているため、柔軟性が低下し、新しい種類の LightBulb を使う場合に変更が必要となります。

DIPを守った場合の設計例

この修正例では、Switch クラスが LightBulb ではなく Switchable という抽象に依存するように変更されています。これにより、新しい種類の Switchable を追加する際に、既存のコードを変更せずに拡張できるようになり、依存性逆転の原則が守られるようになります。