3

各エンティティのデータベース操作をどこに置くべきかを理解しようとしています。この混乱の前は、エンティティごとに、これらすべてのデータベース操作をプロバイダークラスで実行していました。プロバイダークラスとは、各クラスにプロバイダーがあることを意味します。そのような:

class Member
{
   public string FirstName;
   public string LastName;
}

class MemberProvider
{
  //Singleton
  //Do database operations

   ......

   public List<Member> GetItems(FirstName = null, LastName = null)
   {
       // run store procedure
       //this returns List<Member> if any
   }

   public Member GetItem(int? Id = null,FirstName = null, LastName = null)
   {
       // run store procedure
       //this return Member if any
   }

   ....
}

次に、フィルタリングを含むメンバーのリストが必要な場合は、次のようにします。

 List<Member> members = MemberProvider.Instance.GetItems(FirstName = "John", LastName = "Black");

問題は、エンティティ自体のエンティティに関連するこのすべてのデータベース操作をどのように実行できるかということです。それは良い習慣ですか?この概念を理解するには何を読む必要がありますか?

前もって感謝します。

4

4 に答える 4

5

ほとんどの場合、ビジネスオブジェクトとデータアクセスは分離する必要があります。ここここでリポジトリパターンを見てください。これはおそらくまさにあなたが必要とするものです。

于 2012-06-19T21:02:12.740 に答える
4

リポジトリパターンを使用することをお勧めします。ここでは、優れた紹介とサンプルコードを取得するための本当に良い投稿です:EntityFramework4.0でのリポジトリと作業単位のパターンの使用

ASP.NETMVCアプリケーションでのリポジトリと作業単位パターンの実装

于 2012-06-20T01:29:14.503 に答える
3

「関心の分離」の原則を使用することを検討する必要があります。したがって、別のクラスがクラッド操作を担当する必要があります。

リポジトリパターンを調べることを検討できます。PatrikLöwendahlは、最初に読みやすいチュートリアルを作成しました。

于 2012-06-19T21:00:58.327 に答える
2

データベースの操作は別のクラスにすべきだと思います。単一責任プリンシパルhttp://www.objectmentor.com/resources/articles/srp.pdfとリポジトリデザインパターンhttp://martinfowler.com/eaaCatalog/repository.htmlをご覧ください。

于 2012-06-19T20:59:07.687 に答える