Czytam kolejna książkę o ASP NET MVC5 i po raz kolejny jest przykład ze pobieranie danych odbywa się w kontrolerze. Przewija sie to w wielu ksiazkach i tutorialach, mamy np:
public class StudentController : Controller
{
private readonly IStudentRepository repository;
public StudentController(IStudentRepository repo)
{
repository = repo;
}
public ViewResult Edit(int id)
{
Student student = repository.Students.FirstOrDefault(s => s.StudentId == id);
return View(student);
}
//...
}
To jest bardzo prosty przykład, ale jak to będzie wygladało jak bedziemy chcieli pobrac i zwrocic dane z wielu repozytoriów, bedzie totalny chaos. Sadze ze nie tak powinno to wygladac. Według mnie powinien tam byc przekazywany ViewModel czyli ja bym to zrobil tak:
public ViewResult Edit(int id)
{
StudentService studentService = new StudentService();
StudentViewModel studentViewModel = studentService.GetStudentViewModel(id);
return View(studentViewModel);
}
Tylko w takim przypadku zastanawiam się jak z kontrolera (i czy w ogóle tak to zrobić) przekazywać repozytorium do studentService. Czy zrobić po prostu
public class StudentService
{
public StudentViewModel GetStudentViewModel(IStudentRepository repository, int id)
{
//pobieranie danych
//mapowanie na StudentViewModel
//zwracanie StudentViewModel
}
//...
}
Tylko wtedy pojawia się problem bo StudentViewModel może mieć tez elementy z innych repozytoriów (ITeachersRepository, ILectureRepository)
Jak to ładnie ugryźć?