依存性注入(DI)は、よく知られた流行のパターンです。ほとんどのエンジニアは、次のような利点を知っています。
- 単体テストの分離を可能/簡単にする
- クラスの依存関係を明示的に定義する
- 優れた設計の促進(たとえば、単一責任原則(SRP))
- すばやく切り替え実装を可能にする(
DbLogger
代わりにConsoleLogger
例えば)
DIは良い、有用なパターンであるという業界全体のコンセンサスがあると思います。現時点ではあまり批判はありません。コミュニティで言及されている欠点は、通常は軽微です。それらのいくつか:
- クラスの数が増えました
- 不要なインターフェイスの作成
現在、同僚とアーキテクチャ設計について話し合っています。彼はかなり保守的ですが、心を開いています。ITの多くの人々は最新のトレンドをコピーし、利点を繰り返し、一般的にはあまり考えすぎないため、あまり深く分析しないでください。
お願いしたいことは:
- 実装が1つしかない場合、依存性注入を使用する必要がありますか?
- 言語/フレームワーク以外の新しいオブジェクトの作成を禁止すべきですか?
- 特定のクラスの単体テストを計画しない場合、単一の実装をインジェクトするのは悪い考えです(実装が1つしかないため、「空の」インターフェースを作成したくないとしましょう)。
UserService
そのクラスを持っているなら、ロジックの単なるホルダーです。データベース接続が挿入され、ロールバックされるトランザクション内でテストが実行されます。多くの人はこれを悪い習慣と呼ぶでしょうが、これは非常にうまく機能することがわかりました。テストのためだけにコードをゆがめる必要はありません。統合テストのバグ発見力が得られます。