Trong ứng dụng mvc ASP.net của tôi Tôi đang sử dụng Lớp dịch vụ và Kho lưu trữ để giữ bộ điều khiển của tôi mỏng. Một chi tiết đặc trưng chỉ đọc cái nhìn trông như thế này:MVC - Bộ điều khiển cho lớp dịch vụ Truyền thông
public ActionResult Details(int id)
{
var project = _projectService.GetById(id);
return View(Mapper.Map<Project, ProjectDetails>(project));
}
Dịch vụ Lớp:
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);
}
}
Chuyển từ lớp dịch vụ cho các mô hình xem là khá dễ dàng vì automapper, có thể san bằng mọi thứ khá dễ dàng. Di chuyển trực tiếp khác, từ mô hình xem để đi vào lớp dịch vụ của tôi là nơi tôi đấu tranh để đưa ra một giải pháp tốt.
Trong trường hợp như Tạo hành động, cách tiếp cận tốt cho điều này là gì?
[HttpPost]
public ActionResult Create(CreateProjectViewModel model)
{
if(!ModelState.IsValid)
{
return View(model);
}
// TODO
return RedirectToAction("Index");
}
Tôi khá chắc chắn rằng các lớp dịch vụ không nên biết gì về quan điểm mô hình, nhưng tôi cũng không nghĩ rằng AutoMapper hoạt động tốt trong kịch bản này, hoặc, vì nó không giỏi tham gia một mô hình bằng phẳng và biến nó thành một vật thể phức tạp.
Trình điều khiển của tôi trông như thế nào để giao tiếp với lớp dịch vụ? Tôi muốn giữ mã trong bộ điều khiển càng nhẹ càng tốt.
Bạn biết đấy, tôi luôn thấy AutoMapper là cồng kềnh theo cách này, sẽ tốt hơn nếu như Resharper có thể thực hiện cách tạo ánh xạ trên các đối tượng phức tạp một cách tự động. Có thể tạo một trình cắm thêm tốt –
Giới thiệu về việc làm mới với AutoMapper: bạn đã xem http://stackoverflow.com/questions/3145062/using-automapper-to-unflatten-a-dto chưa? – rsenna
@rsenna Tôi sẽ xem xét điều đó, cảm ơn. – Dismissile