В моем приложении ASP.net mvc я использую сервисный уровень и репозитории, чтобы держать свои контроллеры тонкими.Типичное подробное представление, доступное только для чтения, выглядит следующим образом:
public ActionResult Details(int id)
{
var project = _projectService.GetById(id);
return View(Mapper.Map<Project, ProjectDetails>(project));
}
Сервисный уровень:
public class ProjectService : IProjectService
{
public Project GetById(int id)
{
var project = _projectRepository.GetProject(id);
// do some stuff
return project;
}
}
public class ProjectRepository : IProjectRepository
{
public Project GetProject(int id)
{
return context.Projects.Find(id);
}
}
Переход от сервисного уровня к модели представления довольно прост из-за автоматического средства, которое может сгладитьвсе довольно легко.Перемещая другой прямой путь от модели представления к своему уровню обслуживания, я пытаюсь найти хорошее решение.
В какой ситуации, например, в действии Create, какой подход к этому хорош?
[HttpPost]
public ActionResult Create(CreateProjectViewModel model)
{
if(!ModelState.IsValid)
{
return View(model);
}
// TODO
return RedirectToAction("Index");
}
Я почти уверен, что сервисный уровень не должен ничего знать о моделях представления, но я также не думаю, что AutoMapper также хорошо работает в этом сценарии, так как он не очень хорош для создания плоской моделии превращая его в сложный объект.
Как должен выглядеть мой контроллер для связи со служебным уровнем?Я хочу, чтобы код в контроллере был как можно более легким.