2016-03-18 15 views
1

私は、インターフェイスを持つ抽象基本クラスを持っています。c#インターフェイスと継承のベストプラクティス

interface ISubmit { 
    bool SubmitFile(); 
} 

public abstract class SubmitMaster : ISubmit { 
    public abstract bool SubmitFile(); 
} 

public class SubmitRoute : SubmitMaster { 
    public override bool SubmitFile() { 
     //... 
    } 
} 

基底クラスは、子クラスによって使用されるいくつかの他の実装方法を有しているが、私はそれぞれの子クラスはSubmitFile()メソッドを持っており、それぞれがそれのためにそれ自身のブロックが必要であることを確認する必要があります。現在、その作業はうまくいっていますが、私がやったことはむしろ冗長であると感じています。インターフェイスが必要なのでしょうか?または、基本クラスとSubmitFile()が間違った動きを抽象化していますか?

この場合のベストプラクティスは何ですか?

+1

http://stackoverflow.com/questions/17278333/abstract-base-classes-that-implement-an-interfaceよく読むことができます。それは明示的にあなたの質問に答えるものではありませんが、あなたが決定を下すのに役立つものかもしれません。 –

答えて

1

あなたのケースでは、インターフェイスは絶対に冗長です。

それは必ずしもSubmitMaster抽象クラスから派生されていない他のクラスによって実装されなければならない場合はおそらく、私はまだこのようなインターフェイスを維持するであろう。

またはインターフェイスがAPIの一部であり、SubmitFileメソッドを使用する必要がある場合は、SubmitMaster抽象クラスのすべてのメンバーを公開する必要はありません。

実際、インターフェイスが便利な理由はたくさんありますが、抽象クラスでインターフェイスを実装するためのインターフェイスを定義しているだけで、インターフェイスをいわゆるインターフェイスとして入力することは決してありません、そして、再び、それは絶対に冗長です。

さらに読書:

1

が、この場合のベストプラクティスは何ですか?インターフェイスが必要なのでしょうか?

あなたが作ることに計画していますが、一切互いに関係のない、少なくとも種類を言うことができますが、それにもかかわらず、すべてがISubmitとして使用することができますか?

たとえば、シーケンスを表すインターフェイスがあるとします。すべてのシーケンスである十数個の完全に無関係のクラスを私に与えることができます。配列、リスト、辞書、樹木、それはまったくの配列です。そこで、シーケンスを表すインターフェイスIEnumerableを作成します。

あなたはインターフェイスを使用していないその後、共通の使用ケースを持って無関係物事の束を作ることに計画していない場合。

+0

私はあなたがそれを気に入らないことは知っていますが、依存関係の注入は、「無関係なものがたくさんある」場合でもインタフェースを定義する理由となります。 –

+0

@LucaCremonesi:依存関係のインプリメンテーションを別にして、それを注入する予定がないのであれば、どうしたら依存性注入をしているのですか?それは不当な費用のように思えます。 –

+0

@LucaCremonesi、なぜDIはインターフェースを必要としますか?特定のフレームワークについて話していますか?私は可能な実装が1つしかない場合、インターフェイスを使わずにクラスにすべてのサービスを注入します。 (仮想メンバは潜在的なモックの要件を解決します)。私はサービスファクトリを使うことができますが、時々行いますが、多くの場合、その努力に値するものではありません。 – adrianm

関連する問題