3

I currently have a repository based on Entity Framework v4 entities (CRUD and GET operations implemented). I'm in the process of creating the corresponding View Models for these entities. Where should I put the conversion/mapping between them? In the controller or modify the repository to perform the mapping in its methods and return back (or accept) the View Model typed objects?

Should I do this

    public ActionResult Index()
    {
        var person = new PersonRepository().Get();

        var personViewModel = new PersonViewModel();
        personViewModel.InjectFrom(person)
            .InjectFrom<CountryToLookup>(person);

        return View(personViewModel);
    }

or this

     public ActionResult Index()
        {
            var personViewModel = new PersonRepository().Get(); // returns object of type PersonViewModel

// and move this to repository
//            var personViewModel = new PersonViewModel();
//            personViewModel.InjectFrom(person)
//               .InjectFrom<CountryToLookup>(person);

            return View(personViewModel);
        }
4

2 回答 2

3

如果要在其他地方重用,我会将其提取到控制器上的私有方法中,或者将其放入服务类中。

我不认为将它放在存储库中是一个好主意,除非它不是通用的。这应该是因为在我看来通用存储库很摇滚!

于 2011-01-18T17:29:27.503 回答
1

我永远不会将转换代码放入您的存储库中。

  • 存储库从其他关注点抽象数据访问。意见摘要
  • 其他问题的 UI 格式。

将两者混合只是将所有仔细的脱钩都扔掉了。

MVC 的书上定义强烈暗示应该在控制器内部进行转换:

"控制器接收输入并通过调用模型对象来启动响应。控制器接受来自用户的输入并指示模型和视口根据该输入执行操作。 "

于 2011-01-18T17:34:38.237 回答