5

オブジェクト指向コンポーネントで、クラスに使用できる実装が1つだけで、そのクラスが他のコンポーネントに「公開」されていない場合でも、インターフェイスを用意して、代わりにインターフェイスを操作することをお勧めしますか?

私は「インターフェースへのプログラミング」の設計原理を十分に認識しており、それを広く使用しています。

最近、私はほとんどの場合、(可能であり、理にかなっているとはいえ)別の実装が必要になることはないことを観察しています。常にインターフェイスを操作する結果として、アプリケーションコードにはかなりの量のインターフェイスがあり、それぞれに1つの実装しかなく、インターフェイスは一種のオーバーヘッドのように見えます。

代わりに、具象クラスを操作して、2番目の実装が必要な場合にのみインターフェースを導入することが望ましいですか?とにかく、最近ではIDEを使用してインターフェイスを抽出するのは簡単です。また、新しいインターフェイスが導入されたときに、古い具象クラスへの参照を変更して、代わりに新しいインターフェイスを使用することができます。

どう思いますか?

4

6 に答える 6

13

実装が1つしかない場合でも、インターフェイスへのプログラミングを続ける理由の1つは、テストの作成がはるかに簡単になるためです。テストしたいものは何でもテストするようにプロキシを設定でき、密結合について心配する必要はありません。

これは常に推奨されるとは限りませんが、決定しようとするときに検討する価値のあることです。このクラス/オブジェクトを広範囲にテストする必要があると思いますか?あなたがそうなると思うなら、具体的なクラスとは対照的に、インターフェースを扱う方がはるかに簡単です。

これに代わる方法は、インターフェイスを使用せず、具象クラスをサブクラス化することです。これも機能しますが、これも状況によって異なります。

于 2009-09-08T16:28:35.657 に答える
6

具体的なタイプのインターフェースを作成することは、利点を提供せず、冗長なタイプでドメインスペースを複雑にするだけのインターフェースの爆発を簡単に作成できるため、微妙なバランスを取る行為です。

私の経験則は、公開APIの一部であるタイプのインターフェースのみを作成することです。APIの実装専用であり、APIから公開されることのないすべてのタイプは、インターフェースを必要としません。

于 2009-09-08T16:27:41.493 に答える
3

インターフェイスは、作成するのではなく、進化させる必要があります。インターフェイスを作成する前に、インターフェイスが特に必要です。複数の実装が必要ない場合は、インターフェースは必要ありません。常に覚えておいてください、YAGNI

于 2009-09-08T16:30:45.903 に答える
0

私の知る限り、インターフェースが正当化される状況は3つあります。

  1. これはアーキテクチャの一部です(これはあまり明確に定義されていないことを認めます)。
  2. 複数の実装があります。
  3. これはパブリックインターフェイスです。

具体的なクラスを使用することを恐れないでください。すべてのクラスのインターフェースを機械的に生成しないでください。

于 2009-09-08T16:58:49.980 に答える
0

すでに与えられた良い答え(テストとパブリックAPIの容易さ)に加えて、私はインターフェースを使用するのが好きです。なぜなら、クラスが「どのように」行うよりも「何を」行うべきかということに集中しやすくなるからです。

于 2009-09-08T17:30:30.183 に答える
0

一般的に:いいえ。機能を1回だけ実行する場合は、インターフェイスは必要ありません。すべてのようなインターフェースにはトレードオフがあります。それらは、より多くの作業(コスト)をもたらし、さらにいくつかの利点をもたらす可能性があります。コストが利益を上回っている場合は、おそらくそれを行うべきではありません!

于 2011-09-07T03:09:20.747 に答える