MVC最佳实践:在哪里进行模型之间的映射



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

  1. 项目1:MVC应用程序(ViewModels,Controller,Actions,UI)
  2. 项目2:域模型(域类、行为、数据访问(持久层、存储库)

我的问题是在哪里进行映射和数据访问(如何组织代码)。

根据定义(据我所知),控制器应该将请求映射到正确的视图,并尽可能精简。

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

我主要有两个地方可以放代码:

  1. 在控制器中:

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

  1. 在ViewModel中:

这感觉更好,但我不喜欢在模型中安装存储库和UnitOfWork。不知道那是不是属于那里。

现在我正在做介于两者之间的事情:

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

然而,在网络上的例子中,我总是在控制器中看到所有这些代码,这让我想知道——什么是正确的方法

为了在ViewModel中执行此操作,这意味着您的ViewModel必须理解您的其他对象。这不好。ViewModel应该尽可能不考虑外部依赖关系。

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

您可以使用ActionFilter属性来执行映射过程。请参阅Jimmy Boggard关于如何做MVC视图模型的博客。我个人认为这是一种干净的方法,并从控制器中删除了映射代码。

最新更新