web-dev-qa-db-ja.com

クラスのバージョンが1つしかない場合は、依存性注入を使用する必要がありますか?

私は、頻繁に再利用されるプロセス(つまり、特定のページへのアクセス、特定のフィールドへの入力など)を含むHelperクラスを使用する多数のSeleniumテストクラスを作成しています。

現在、これらのHelperクラスは、すべてのテストクラスが拡張するBasicTestクラスにインスタンス化されています。

依存関係注入を使用してHelperclassesをインスタンス化することを考えていましたが、この場合、それが適切かどうかわかりません。私は各Helperクラスの定義が1つしかないことを知っているので、依存性注入でそれらをインスタンス化することはまだプラスでしょうか、それとも理由もなくプロジェクトを複雑にする無意味な作業でしょうか?

4
Grumbunks

それがベストプラクティスであることはご存知のようですが、努力する価値があるかどうかはわかりません。

DIとあなたのケースの詳細を残して、ここに私の「私はそれに悩まされるべきか?」ルール、または略してSIBWI。

  1. 実際に実装するには余分な時間がかかりますか?
  2. 私はクワサッツ・ハデラッハですか?
  3. 新しいことを学びたいですか?
  4. 私がベストプラクティスに従っていることをsayできるようにしたいですか?
  5. 私は怠惰ですか?
  6. このコードはいつまで存在しますか?

ほとんどの場合、答えは

  1. 番号
  2. 番号
  3. はい
  4. はい
  5. 多分

そして私はベストプラクティスに従います

5
Ewan

依存性注入を使用する理由は、ソフトウェアの再利用と拡張性を促進するためです。引数がインターフェイスであるクラスメソッドがある場合、「特定のインスタンスがこのインターフェイスを実装している限り、何でも与えてください」と世界に伝えています。

ただし、コードが1つのタイプの実装で確実に機能するように作成されている場合(つまり、クラスがヘルパーの実装を1つだけ期待している場合は、常に)、代わりに引数を実装クラスタイプに変更することを検討してください。

しかし、インターフェースではなく実装に合わせてプログラムを作成すると、この決定に拘束されることになります。

つまり、特に新しいAPIを設計するときは、メソッドシグネチャを慎重に検討してください。これらが定義されると、クライアントによってこのように機能することが期待されます。

APIが変更されたという理由だけでクライアントがコードを変更することを期待することは悪いことです(残念ながら、それは頻繁に発生します)

4
Constantin