MVC - связь между контроллером и уровнем обслуживания

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

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 работает хорошо и в этом сценарии, поскольку из плоской модели нельзя превратить ее в сложный объект.

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

6
задан Dismissile 17 February 2012 в 15:33
поделиться