重複の可能性:
インターフェースと基本クラス
インターフェイスを使用して実装されたリポジトリパターンを確認するのが一般的です
public interface IFooRepository
{
Foo GetFoo(int ID);
}
public class SQLFooRepository : IFooRepository
{
// Call DB and get a foo
public Foo GetFoo(int ID) {}
}
public class TestFooRepository : IFooRepository
{
// Get foo from in-memory store for testing
public Foo GetFoo(int ID) {}
}
しかし、抽象クラスを使用してこれを同様に行うことができます。
public abstract class FooRepositoryBase
{
public abstract Foo GetFoo(int ID);
}
public class SQLFooRepository : FooRepositoryBase
{
// Call DB and get a foo
public override Foo GetFoo(int ID); {}
}
public class TestFooRepository : FooRepositoryBase
{
// Get foo from in-memory store for testing
public override Foo GetFoo(int ID); {}
}
リポジトリシナリオで抽象クラスよりもインターフェイスを使用することの具体的な利点は何ですか?
(つまり、複数のインターフェースを実装できるとだけ言ってはいけません。これはすでに知っています。なぜリポジトリの実装でそれを行うのでしょうか)
明確にするために編集-「 MSDN-クラスとインターフェイスの選択」のようなページは、「適切な理由がない限り、インターフェイスからクラスを選択する」と言い換えることができます-リポジトリパターンの特定の場合の適切な理由は何ですか