我有一个MVC项目大致如此组织:
我的问题是在哪里进行映射和数据访问(如何组织代码)。
通过definition(根据我的理解),控制器应该将请求映射到正确的视图并尽可能瘦。
我在基本映射上使用Automapper,我在控制器中使用它,但是对于更复杂的映射,我发现自己更容易进行映射。
我主要有两个地方来代码:
这很容易变得非常混乱,特别是如果我需要从几个存储库获取信息,创建选择列表等等。
这感觉更好,但我不喜欢在模型中实现存储库和UnitOfWork。不知道那是否属于那里。
现在我正在做两件事:
我让ViewModel将所需的存储库作为构造函数 参数,我在那里做映射。我实现了 存储库/ UnitOfWork在控制器中并传入。好 事情是,我可以使用一个接口的存储库,所以 ViewModel不需要关心实现。
但是,在网络上的示例中,我总是在控制器中看到所有这些代码,这让我想知道 - 这样做的正确方法是什么?
答案 0 :(得分:4)
为了在ViewModel中执行此操作,这意味着您的viewmodel必须了解您的其他对象。这不好。对于外部依赖项,ViewModel应该尽可能地愚蠢。
您应该在控制器中进行映射。
答案 1 :(得分:1)
您可以使用ActionFilter属性来执行映射过程。请参考Jimmy Boggard的博客How to do MVC - View Model。我个人认为这是干净的方法,摆脱控制器的映射代码。