個人的には、本番環境の実装が1つしかない場合でも、抽象化にプログラムするのが便利だと思います。特に:
- 本番環境の実装が1つしかない場合でも、本格的な偽物や動的に作成されたモックなど、他の実装がテストに含まれている可能性があります。
- 多くの場合、具象クラスに依存するよりも、依存関係をより明確に表現できます。たとえば、具象クラスは、さまざまな理由で、依存していない他のパブリックメンバーを公開する場合があります。
念のために言っておきますが、これは最初から誤った記述です。
依存性注入では、抽象化に対してプログラムします。
具象クラスで依存性注入を完全に簡単に使用できます。依存関係のインターフェースを作成する必要があることは言うまでもありません。依存性注入は、クラスが依存性を表現するために使用する抽象化のレベルではなく、依存性を取得する方法に関するものです。
だから基本的に:
- 本番環境の実装が1つしかない場合でも、抽象化を実装するための「テストダブル」の重要性を過小評価しないでください。
- 本当に必要な場合は、具体的な実装に依存することを恐れないでください。ただし、その依存関係を注入することは、実際には「適切な」依存関係であるクラス内で作成するよりもクリーンです。
- すべてを注入しようとしないでください。依存関係の動作が実際には相互作用ではない場合は、注入したくない場合があります。たとえば、インスタンスの作成を避けるためだけに「コレクションプロバイダー」の注入を開始しないでください。たとえば、テスト目的で
List<T>
クラスをの動作から分離する必要はありません。List<T>