MVC最佳实践:模型之间的映射

时间:2012-02-27 13:11:19

标签: asp.net-mvc model controller mapping

我有一个MVC项目大致如此组织:

  1. 项目1:MVC应用程序(ViewModels,Controller,Actions,UI-stuff)
  2. 项目2:域模型(域类,行为,数据访问(持久层,存储库)
  3. 我的问题是在哪里进行映射和数据访问(如何组织代码)。

    通过definition(根据我的理解),控制器应该将请求映射到正确的视图并尽可能瘦。

    我在基本映射上使用Automapper,我在控制器中使用它,但是对于更复杂的映射,我发现自己更容易进行映射。

    我主要有两个地方来代码:

    1. 在控制器中:
    2. 这很容易变得非常混乱,特别是如果我需要从几个存储库获取信息,创建选择列表等等。

      1. 在ViewModel中:
      2. 这感觉更好,但我不喜欢在模型中实现存储库和UnitOfWork。不知道那是否属于那里。

        现在我正在做两件事:

          

        我让ViewModel将所需的存储库作为构造函数   参数,我在那里做映射。我实现了   存储库/ UnitOfWork在控制器中并传入。好   事情是,我可以使用一个接口的存储库,所以   ViewModel不需要关心实现。

        但是,在网络上的示例中,我总是在控制器中看到所有这些代码,这让我想知道 - 这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

为了在ViewModel中执行此操作,这意味着您的viewmodel必须了解您的其他对象。这不好。对于外部依赖项,ViewModel应该尽可能地愚蠢。

您应该在控制器中进行映射。

答案 1 :(得分:1)

您可以使用ActionFilter属性来执行映射过程。请参考Jimmy Boggard的博客How to do MVC - View Model。我个人认为这是干净的方法,摆脱控制器的映射代码。