向MVC添加服务层 - 如果服务层不知道ViewModels,如何处理Edit()?

时间:2013-02-25 18:18:22

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个带控制器的MVC层,它使用服务层来获取和存储数据。在我的服务层中,我有这样的方法:

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来显示数据。在实现编辑服务之前,这已经很好了 - 我现在要做的是创建一个UpdateSet方法,该方法从控制器获取viewModel并相应地更新数据库。

由于MVC层依赖于服务层,因此服务层不了解viewModels。这是依赖注入的来源吗?或者有一种更好的方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要将ViewModel转换为Set,然后将其传递到服务层。

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