1

私はMVCでプロジェクトを書いていますが、EF 4.0を使っています。私はリポジトリパターンを使用していますが、いくつかのプロパティを配置する場所が不明です。EFとリポジトリパターン

public interface IUserRepository<User> 
{ 
    User GetUserById(int userId); 
    void UpdateUser(User user); 
    void AddUser(User user); 
    List<User> GetUsersByName(string userName);    
    void Create(User user);  
    int NumberOfFollowers { get; set; }  
} 

私の2つの問題は1)です。プロパティNumberOfFollowersはプロパティまたはメソッドである必要がありますか? および2)。インターフェイスの代わりにUserエンティティクラスの内部に配置する必要がありますか?

歓声。

答えて

4

NumberOfFollowersは、ユーザーのプロパティである場合、それは間違いなくUserクラスではなく、リポジトリにする必要があります。リポジトリはデータを取得/投入することを担当します。ここで

は、EFのための私のお気に入りのリポジトリの実装です:

http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

この1つは、素晴らしいですが非常に完全な機能の多くが付属しています。

1

NumberOfFollowersは、User自身のプロパティであり、リポジトリインターフェイスではありません。

優しさ、

ダン

+1

これはコメントだったはずです。 –

+0

NumberOfFollowersというプロパティを持つIUserというインターフェイスを作成しましたが、EFエンティティタイプを持つUser Entityクラスから派生する際に問題があります。 – scouserider

1

re:プロパティまたはメソッド、.NET Design Guidelessは、a)throw可能な例外またはb)返す時間が著しく長くなる可能性がある場合、プロパティではないことを指示します。

0

私はダニエルの答えに同意します - NumberOfFollowersというプロパティが最も論理的です。目安として、Userオブジェクトを介してアクセスできるデータがある場合は、Userクラスに直接作成されたプロパティ\メソッドを使用してください。他のテーブルにforeginキーを持っている場合は、Userクラスを使用してこれらのデータ項目にアクセスすることができ、プロパティ\メソッド内にカプセル化する必要があります。

一方、Userに関する情報を検索したいが、別のオブジェクトのヘルプが必要な場合は、UserServiceクラスを作成します。リポジトリをシンプルに保つ - データ検索/操作方法のみを持ち、別個のサービスクラスでより複雑な/ビジネスロジックの空腹のメソッドを作成する。

public class UserService { 
    private DbContext Context {get; set;} 

    public IList<Document> GetUserDocument(User user) 
    { 
     // Assuming User table does not have a Document ID as a foregin key.. 
     // Do whatever you need to do to get document. 
    } } 

上記は大まかなガイドであり、決してデファクトスタンダードではありませんが、私にとってはうまくいきます。

+0

EFで作成されたユーザーエンティティクラスに、上記のすべてのメソッドをインターフェイス内に置くことをお勧めしますか? – scouserider

0

私はORMプロバイダ固有の機能、要求オブジェクトコンテキスト管理、複数のデータベースからのモデル管理、完全なソースコードとサンプルによる作業単位パターンによるトランザクション管理を抽象化する方法について説明しました。

ご不明な点がありましたら、私にご連絡ください。

関連する問題