【发布时间】:2012-03-09 00:26:18
【问题描述】:
在我的 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);
}
}
从服务层移动到视图模型非常容易,因为自动映射器可以很容易地展平事物。将另一个直接从视图模型转移到我的服务层是我努力想出一个好的解决方案的地方。
在像创建操作这样的情况下,有什么好的方法?
[HttpPost]
public ActionResult Create(CreateProjectViewModel model)
{
if(!ModelState.IsValid)
{
return View(model);
}
// TODO
return RedirectToAction("Index");
}
我很确定服务层应该对视图模型一无所知,但我也不认为 AutoMapper 在这种情况下工作得很好,因为它不擅长将平面模型制作成复杂的对象。
我的控制器与服务层通信应该是什么样的?我想让控制器中的代码尽可能简洁。
【问题讨论】:
-
你知道,我一直发现 AutoMapper 在这种方式下也很麻烦,如果像 Resharper 这样的东西可以实现一种在复杂对象上自动创建映射的方法,那就太好了。可能会成为一个很好的插件
-
关于使用 AutoMapper 展开:你看过stackoverflow.com/questions/3145062/…吗?
-
@rsenna 我去看看,谢谢。
标签: c# asp.net-mvc service-layer