2013-02-25 39 views
0

我有控制器,使用服务层获取和存储数据的MVC层。在我的服务层我有这样的方法:将服务层添加到MVC - 如果服务层不知道ViewModels,如何处理Edit()?

public interface ISetServices 
    { 
     List<Set> GetBreadcrumbs(int? parentSetId); 

     List<Set> GetAllSets(); 
     List<Set> GetAllTopLevelArchivedSets(); 
     List<Set> GetTopLevelSets(); 
     Set GetSet(int? setId); 
     Set CreateSet(string name, string details, int? parentSetId); 
     void DeleteSet(int? setId); 
     void ArchiveSet(int? setId); 
     void UnArchiveSet(int? setId); 
/etc 

我的MVC层使用viewModels来显示数据。在实现Edit服务之前,这一直没有问题 - 我现在要做的是创建一个UpdateSet方法,该方法从控制器获取viewModel并相应地更新数据库。

由于MVC层是依赖于服务层,服务层没有的ViewModels的知识。这是依赖注入进来吗?还是有更好的方法来处理我忽略的方法?

+0

是'设置'视图模型还是DTO /域模型? – Martin 2013-02-25 18:25:47

+1

您需要将viewModel属性映射到域模型属性。您的服务层将使用域模型,您的UI与视图模型。您可以手动执行此映射或使用像AutoMapper – 2013-02-25 18:26:04

+0

设置一个插件是一个域模型马丁 – RobVious 2013-02-25 18:29:02

回答

1

您需要将您的视图模型转换为Set,然后传递到服务层。

public class SetController : Controller 
{ 
    public Action Edit(SetViewModel viewModel) 
    { 
     var set = _setService.GetSet(viewModel.SetId); 
     set.Prop1 = viewModel.Prop1; 
     _setService.Edit(set); 
    } 
} 
+0

非常感谢马丁 - 。不能我相信我没有意识到这一点,我想我试图保持控制器的所有逻辑 - 包括映射。我将开始阅读AutoMapper :) – RobVious 2013-02-25 18:54:58