Где я должен выполнить запрос с помощью ToList() - в DAL, BLL или в контроллере?
У меня есть проект DAL, BLL и Web. Где я должен выполнить запрос с помощью ToList ()?
Прямо сейчас я выполняю запрос с помощью ToList () в контроллере-это нормально? Например-с самого начала:
DAL-мой метод в классе NotesRepository:
public IQueryable<Notes> GetAllNotes()
{
return context.Notes.Include(x => x.Comments).OrderByDescending(x => x.CreateDate);
}
BLL-мой метод в классе NotesService:
public IEnumerable<Notes> GetNotes()
{
return _unitOfWork.NotesRepository.GetAllNotes();
}
Web-мое действие в контроллере (выполнение запроса с помощью ToList ()):
public ActionResult Index()
{
var notes = _notesService.GetNotes().ToList();
return View(notes);
}
2 ответа:
По моему личному мнению, это касается данных, поэтому решение позвонить .ToList() должно произойти в DAL. Возможно, есть основания для гибкости, чтобы, возможно, связать вещи вместе или уточнить запрос, так что вы могли бы оправдать размещение вызова в BLL, но вы все равно строите эту гибкость в DAL и в целом возвращаете данные DAL, а не объекты запроса.
Не то, чтобы это когда-либо происходило в реальной жизни, но это также дает вам больше гибкости, чтобы поменять DAL с некоторыми другими источник данных (например, веб-api). Если вы пускаете кровь IQueryable в ваш DAL, это становится сложнее, и инкапсуляция слоя/уровня нарушается.
Я бы не рекомендовал впускать IQueryable в контроллер.