3

私はこれを持っています:

public interface IRepository<T> where T : class
{
    void Delete(T entity);
    void Add(T entity);
    void Attach(T entity);
    void Detach(T entity);
    void SaveChanges();
}

今、すべてのエンティティに対して、一般的な IRepository を実装する具体的なクラスを作成します =>

public class SchoolclassRepository : IRepository<Schoolclass>
{
    public void Delete(Schoolclass entity)
    {
        throw new NotImplementedException();
    }

    public void Add(Schoolclass entity)
    {
        throw new NotImplementedException();
    }

    public void Attach(Schoolclass entity)
    {
        throw new NotImplementedException();
    }

    public void Detach(Schoolclass entity)
    {
        throw new NotImplementedException();
    }

    public void SaveChanges()
    {
        throw new NotImplementedException();
    }
}

私のViewModelのコンストラクター(mvvmパターン)でこれを行います=>

IRepository<Schoolclass> repo = new SchoolclassRepository();

とにかくすべてのエンティティ クラスで CRUD 操作のコードを書かなければならない場合、IRepository にはどのような利点がありますか?

Customer、Product、Pupil ではIRepository<Product>IRepository<Customer>IRepository<Pupil>などを実装するクラスに関係なく、インターフェイスのメソッドを実装します。

なぜ言えなかったのか =>

SchoolclassRepository repo = new SchoolclassRepository(); ??? 

小さなアプリの単体テストを書く可能性は気にしません。

4

1 に答える 1

4

リポジトリ パターンは、IoC と依存性注入パターンに基づいています。単体テストでは、テストを容易にするために、たまたま IoC と依存性注入が必要です。多くの人がそのように投稿して実装していますが、もともとはデータアクセス層を別の方法で書くことを意図したものではありませんでした。小さなアプリの場合、どれだけの労力を費やしたいかによって異なります。

通常、SchoolclassRepository の実装は IRepository インターフェイスとは別の名前空間にあるため、複数の実装をサポートできます。(ルールではありません)

ViewModels constructor (mvvm pattern) to take a parameter for the repository interface IRepository<Schoolclass>. Now your ViewModelのコンストラクターは、実装ではなくインターフェイスに基づいて設定できます。

private IRepository<Schoolclass> _repository
public ViewModel(IRepository<Schoolclass> Repository) 
{ this._repository = Repository; }

なぜ上記のことを....

このパターンにより、将来の変更も容易になります。

SchoolclassRepository() の実装で ADO.NET (sqlconnections、sqlcommands...) を使用してデータにアクセスした場合、NHibernate、Entity Framework、またはその他のデータ アクセス方法を使用する別の SchoolclassRepository() を後で構築できます。あとは、対象の実装を使用するように消費者を変更し、ViewModel に注入するだけです。

Repository repository = new ADONET.SchoolclassRepository(); 
or
Repository repository = new EntityFramework.SchoolclassRepository(); 
ViewModel viewmodel = new ViewModel(repository);

これは使用法を簡単に説明したものにすぎません。リポジトリ パターンとそれを機能させる方法についてさらに詳しく調べることをお勧めします。あなたは明らかにそれに興味を持っています。

于 2010-02-18T00:59:13.607 に答える