TheRedEye Ответов: 1

Вопрос новичка MVC. Повторяюсь в контроллере


Все еще совершенно новичок в шаблоне MVC, я не уверен, куда поместить какой-то код.

В моем методе действия контроллера я извлекаю записи базы данных и загружаю их в viewmodel, который передается в представление. Теперь у меня есть другой метод действия в том же контроллере, который извлекает точно такие же записи.

Я хотел бы поместить код поиска записей в свой собственный метод. Но куда мне девать его в том, что касается лучших практик? Новый метод в том же контроллере? Или в пространстве имен моих служб? или в моем пространстве имен ViewModels?

public ActionResult Index(int id)
{
    var model = db.Reports.Find(id);
    // replace with GetReports(id)
    // or Models.Services.GetReports()
    // or ViewModels.GetReports()
    return View(model);
}
public ActionResult ExportToExcel(int id)
{
    var model = db.Reports.Find(id);
    // replace with GetReports(id)
    // or Models.Services.GetReports()
    // or ViewModels.GetReports()

    return ExcelResult;
}


Что я уже пробовал:

Код работает. Это просто вопрос о лучших практиках.

1 Ответов

Рейтинг:
10

F-ES Sitecore

Люди здесь сильно отличаются друг от друга. Вы можете просто поместить частный "GetReports (int id)" на контроллер, однако пуристы MVC скажут, что логика должна быть в модели. Таким образом, вы можете создать модель и дать ей свой идентификатор, и модель должна самостоятельно заполниться из этого идентификатора. Если вы хотите создать службу в качестве интерфейса для своих отчетов, чтобы вы не обращались непосредственно к контексту EF, то вы, конечно, можете сделать и это, и ваша модель будет использовать эти службы для получения своих данных.