4

C# のリポジトリ パターンを理解しています。一般的なリポジトリ パターンについて勉強するとき、私は混乱しています。その繰り返しが多いです。このパターンについて質問があります。

私はEntity Frameworkコードの最初のアプローチを使用しており、2つのモデルクラスがあります

学生
教師

たとえば、汎用インターフェイスが 1 つある場合、使用する汎用インターフェイスの数

public interface IRepository<TEntity>
{
   IQueryable<TEntity> FindAll(Expression<Func<TEntity, bool>> where = null);

   TEntity FindOne(Expression<Func<TEntity, bool>> where = null);       
}

したがって、このインターフェイスは両方のモデル クラスで使用できます。Studentクラスにさらにメソッドがある場合、これらのメソッドを定義できますか? 例えば

public class StudentRepo<TEntity> : IRepository<TEntity> where TEntity : class
{
    public virtual IQueryable<TEntity> FindAll(Expression<Func<TEntity, bool>> where = null)
    {
        return null != where ? Context.Set<TEntity>().Where(where) : Context.Set<TEntity>();
    }

    public virtual TEntity FindOne(Expression<Func<TEntity, bool>> where = null)
    {
        return FindAll(where).FirstOrDefault();
    }

    public void update()
    {
    }

    public int FindId()
    {
    }
}

2 つの新しいメソッドupdate()を追加しましたが、これらのメソッドFindId()StudentRepoどこで定義できますか?

これら 2 つのメソッドを追加したい場合はIRepository、Teacher クラスに対してこれらのメソッドを呼び出す必要があります。それの何の利益になるの?両方のクラスに別々のインターフェースを作成する場合、このアプローチはより良いですか? IStudent や ITeacher のように、使用したいメソッドを定義でき、不要なメソッドは使用されません。

親切に私を案内してください。私はとても混乱しています。

4

3 に答える 3

2

ジェネリック リポジトリのアイデアはあまりにも一般化しようとしていると思います。私の意見では、個別のインターフェイスの方がより意味のあるコントラクトを提供するため、より優れています。このブログはそれを非常によく説明しており、ジェネリック リポジトリを「舞台裏で」使用することを提案しています。

于 2013-05-27T07:31:49.053 に答える