私はASP.NET MVC 3
を使用しています。私は、次の順序で私のビューのデータを取得:私のリポジトリにデータのフィルタリングはコントローラ、サービス、またはレポジトリのレイヤで行われますか?
Controller -> Service Layer -> Repository
は私がカテゴリーのように、特定のオブジェクトのすべてのレコードを戻しますGETALLの方法があります。今
public IEnumerable<Category> GetAll()
{
return categoryRepository.GetAll();
}
:私はのようなものを持つことになり、サービス層で
IEnumerable<Category> categories = categoryService.GetAll();
:私はすべてのカテゴリのリストが必要な場合
それでは、私のコントローラで私のようなものを持っているでしょうこれは私が実際にデータをフィルタリングし始めるところを知る必要があるのですか?これらの3つのレイヤーのいずれかでどこでも実行できますか、またはリポジトリレイヤー内にあるだけですか?私はすべての親カテゴリが必要だと言うことができます。コントローラ、サービスレイヤ、またはリポジトリレイヤに.GetAll.Where(x => x.ParentCategoryId == null);
がありますか?
私は私のコントローラでこのようにそれを持っていますか:
IEnumerable<Category> categories = categoryService.GetParentCategories();
そして、私のサービス層では、私が持つことができます。
public IEnumerable<Category> GetParentCategories()
{
return categoryRepository.GetAll.Where(x => x.ParentCategoryId == null);
}
それとも私のサービス層はこのように見ているん:
をpublic IEnumerable<Category> GetParentCategories()
{
return categoryRepository.GetParentCategories();
}
次に、このような私のリポジトリのレイヤー:
public IEnumerable<Category> GetParentCategories()
{
return GetAll()
.Where(x => x.ParentCategoryId == null);
}
私はこの混乱を明確にするのに役立つ人がいますか?さまざまなシナリオがあります。私はアクティブなステータスを持つすべてのカテゴリを返すかもしれません。私は非アクティブ状態のカテゴリを戻すかもしれません。それから私はそれぞれのためのメソッドが必要ですか?
GetAllは単なるサンプルメソッドですが、主な焦点はフィルタリング部分です。次に、リポジトリにメソッドを1つずつ作成しますか?しかし、Where節を持つSQL Selectのような.Where(...)は動作しませんか? –
エンティティにLINQを使用している場合にのみ、そのために 'IQueryable'が必要です。 –
はい。私はメソッドを取得しているので、リポジトリはそれがスローされるすべての条件を処理できます。 GetALlUsers()メソッドを使用すると、私は人々に火をつけます。地獄のように非効率的です。名前をつけて100.9000人のユーザーを引っ張る - いいえ。 –
TomTom