0

私はゆっくりとエンタープライズ アプリケーション開発の知識を向上させようとしています。ベスト プラクティスに関しては、iRepository インターフェースの具体的なリポジトリ実装の作成について学びましたが、これまでのところそれは理にかなっています。

私が挑戦されているのは、(よくあることですが) 2 つ以上のテーブルからのデータを 1 つの結果セットで返したい場合と、これにどのようにアプローチするのが最善かということです。

集約ルートを特定することがおそらく最善の方法であることは理解していますが、特定の/カスタムリポジトリと汎用リポジトリを使用する場合、インターフェイスとリポジトリに関してこれにどのようにアプローチするか疑問に思っています.

ジェネリック リポジトリは、必要な実装ごとに個別の iRepositories を作成する必要性を削減する優れた方法のように思えますが、問題は、すべての具象クラスがジェネリック リポジトリ インターフェイスのすべてのメソッドを必要としているわけではないことです。もっと必要になる時もあれば、もっと少なくて済む時もあります。

この状況にアプローチするためのベストプラクティスは何ですか? 開発者は通常、1 つの汎用リポジトリ インターフェイスを使用してから、より具体的なデータ アクセスのニーズに合わせてより具体的なものを作成しますか?

このプロジェクトをベスト プラクティスのガイドラインとして使用しました: http://efmvc.codeplex.com/

4

1 に答える 1

4

汎用リポジトリには、最小限のメソッドのみを含める必要があります。次に、通常は各集約ルート (新しいインターフェースと、汎用リポジトリーを継承する新しいクラス) ごとに特定のリポジトリーを作成します。

何かのようなもの:

public interface IRepository<T>
{
    void Create(T);
    void Update(T);
    T Get(int key);
}

public interface IUserRepository : IRepository<User>
{
    User GetByUserName(string userName);
}

したがって、ユーザー リポジトリは次のようになります。

public class UserRepository : Repository<User>, IUserRepository
{
     public User GetByUserName(string userName)
     {
         return DbContext.Users.FirstOrDefault(x => x.UserName == userName);
     }
}

しかし最近は、ここで説明するように、代わりにクエリに移行しています: http://blog.gauffin.org/2012/10/griffin-decoupled-the-queries/

于 2012-10-24T07:50:45.600 に答える