Происходит ли фильтрация данных на уровнях контроллера, службы или репозитория?

Я использую ASP.NET MVC 3 . Я получаю данные своего представления в следующей последовательности:

Controller -> Service Layer -> Repository

В моем репозитории есть метод GetAll, который возвращает все записи для определенного объекта, например Category.

Итак, если мне нужен список всех категорий, тогда в моем контроллере у меня будет что-то вроде:

IEnumerable<Category> categories = categoryService.GetAll();

На уровне обслуживания у меня будет что-то вроде:

public IEnumerable<Category> GetAll()
{
     return categoryRepository.GetAll();
}

Вот что мне нужно знать, где делать Я действительно начинаю фильтровать данные? Можно ли это сделать где-нибудь на одном из этих трех слоев или это должно быть только на уровне репозитория? Допустим, мне нужны все родительские категории. Есть ли у меня .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);
}

Кто-нибудь может помочь прояснить эту путаницу, которая у меня возникла. Возможны разные сценарии. Я могу вернуть все категории, у которых есть активный статус. Я могу вернуть категории с неактивным статусом. Тогда мне нужен метод для каждого?

8
задан Brendan Vogt 25 November 2011 в 12:24
поделиться