1

インターフェイスがあります。新しい要件により、インターフェイスには実装可能な単一のメソッドが含まれるようになりました。

public static string ToEntityConnectionString(this IEnvironmentProvider provider)
//Converts a standard connection string to EntityFramework compatible string

インターフェースを抽象クラスに変換できましたが、継承クラスとしてこのクラスに制限しています。ただし、このインターフェイスは現在、依存性注入のみに使用されています。

少し考えた後、Extension メソッドを介してインターフェイスに機能を追加できることに気付きました。それは本当のようです。インターフェイスに実装を追加しますか? そのようなことをすることは悪い習慣と見なされますか? もしそうなら、なぜですか?状況を考慮して、代わりに何を使用する必要がありますか?

4

2 に答える 2

6

インターフェイスに拡張メソッドがある場合、それをそのインターフェイスに実装を追加するものと考えるべきではありません。これは、インターフェイスを受け取る単なる静的ヘルパー メソッドであり、インターフェイスの公開メンバーに基づいてすべての作業を行います。これは、オブジェクト指向設計でよく見られるものです。オブジェクト指向の原則に反するものではありません。「拡張」部分は、見栄えを良くし、検索/入力を容易にします。拡張メソッドをインターフェイスの一部と実際に考え始めると、実際にはそうではないため、より大きな問題が発生します。

于 2012-04-13T19:12:51.457 に答える
1

拡張メソッドは、クラスのユーザーがコードをコピーして貼り付けるだけで簡単に実行できる単なるヘルパー メソッドであると考えています。非パブリック属性にアクセスせずに機能を実行できる場合、それをインターフェイスに追加することを正当化する新しいものが本当に提供されているのでしょうか。

于 2012-04-13T19:06:58.650 に答える