2

わかりましたので、私はちょうどnhibernateに入っています(流暢を使用しています)。

私が気に入っている点の 1 つは、Repository パターンを使用できることです (詳細については、nhibernate rhino ブログを参照してください)。

基本的にジェネリックを使用して、すべてのデータベース テーブルで機能するメソッドを作成できます。

 public interface IRepository<T>
    {
        T GetById(int id);
        ICollection<T> FindAll();
        void Add(T entity);
        void Remove(T entity);
    }


 public class Repository<T> : IRepository<T>
    {

        public ISession Session
        {
            get 
            { 
                return SessionProvider.GetSession(); 
            }
        }


        public T GetById(int id)
        {
            return Session.Get<T>(id);
        }

        public ICollection<T> FindAll()
        {
            return Session.CreateCriteria(typeof(T)).List<T>();
        }

        public void Add(T t)
        {
            Session.Save(t);
        }

        public void Remove(T t)
        {
            Session.Delete(t);
        }    

    }

次に、Repository クラスを継承し、そのエンティティに固有のメソッドを追加できます。

Update メソッドを追加しようとしたとき、リポジトリ パターンはコレクションに作用するはずだと誰かが言いましたか? ここで物事を間違って見ていますか?update メソッドを作成できないのはなぜですか?

更新メソッドを追加しようとしましたが、セッションを処理してデータベースを更新する方法について混乱していますか?

エンティティごとにすべてのデータベース アクセス用の単一の場所が必要なため、UserRepository にはすべての基本的な CRUD があり、GetUserByEmail() などの他のメソッドが含まれている可能性があります。

4

2 に答える 2

2

リポジトリ パターンを使用しないでください。代わりに UnitOfWork パターンを使用し、定義済みのクエリ ICriteria を ISession に渡します。基本的に、Repo パターンは、NH でラップする必要のないものをラップしています。

詳細については、 http://ayende.com/Blog/archive/2009/04/17/repository-is-the-new-singleton.aspxを参照してください。

于 2009-08-18T22:05:36.440 に答える
1

おそらく、あなたが聞き間違えたか、誰かが言い間違えたのでしょう。Repository パターンは、コレクションを操作するのではなく、コレクションのような動作を公開することになっています。コレクション内のアイテムを追加、削除、検索できるように、リポジトリはデータベースに対して機能する保存、削除、検索操作を提供します。

S#arp Architectureのコードをダウンロードすることをお勧めします。これには、非常に簡単に再利用できるリポジトリ実装が含まれています。依存関係を取りたくない場合は、少なくとも時間をかけて実装を調べて、自分でアプローチする方法についてより良いアイデアを得ることができます。

于 2009-08-18T22:19:02.403 に答える