ASP.NET MVC + EF 4.1分层,模型,视图模型

时间:2011-10-31 09:37:59

标签: asp.net asp.net-mvc-3 entity-framework architecture entity-framework-4.1

我在ASP.NET中阅读了几篇与分层架构相关的文章和问题,但是在阅读过多后我感到有些困惑。 UI层是在ASP.NET MVC中开发的,对于我在项目中使用EF的数据访问。

我想通过一个例子来描述我的问题。假设我有一个简单的博客引擎,具有以下实体:帖子,评论,类别,用户。我使用EF数据库方法并在我的模型层中生成POCO-s到数据模型类库,生成的datacontext和EDMX转到数据访问库。

在此之上,我有一个业务层。例如,它负责返回带有注释的博客条目。在我的UI层我使用的是ViewModel类,因为为了显示一个条目,我需要一个Post实体和一个带有用户名的Comments列表。

现在我的问题是:我的视图不需要用户实体的每个细节,只需要显示帖子的名称。问题是我应该在哪里进行ViewModel和Model类之间的映射?业务层应该这样做吗?或者我应该返回包含每个细节的实体并让UI处理映射?业务层是否应将ViewModels包含为类库?

最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

  

问题是我应该在哪里进行ViewModel和Model类之间的映射?

理想情况下,在单独的映射层中。如果使用AutoMapper映射,则可以在ASP.NET MVC项目的单独文件中声明。

  

业务层应该这样做吗?

绝对不是。业务层不了解任何视图模型。

  

业务层是否应将ViewModels包含为类库?

没有。 UI层(ASP.NET MVC应用程序)是唯一具有视图模型知识的层。如果你愿意,它们当然可以在一个单独的类库中,但它只是应该引用它的UI层。视图模型与视图紧密耦合。视图是用户界面的一部分。

答案 1 :(得分:1)

您好我更喜欢在UI层使用ViewModel。我读过Steven Sanderson的书 Pro ASP.NET MVC 3 Framework 。而在本书的例子中,有很多ViewModels的例子,我推荐阅读这本书。