我在ASP.NET中阅读了几篇与分层架构相关的文章和问题,但是在阅读过多后我感到有些困惑。 UI层是在ASP.NET MVC中开发的,对于我在项目中使用EF的数据访问。
我想通过一个例子来描述我的问题。假设我有一个简单的博客引擎,具有以下实体:帖子,评论,类别,用户。我使用EF数据库方法并在我的模型层中生成POCO-s到数据模型类库,生成的datacontext和EDMX转到数据访问库。
在此之上,我有一个业务层。例如,它负责返回带有注释的博客条目。在我的UI层我使用的是ViewModel类,因为为了显示一个条目,我需要一个Post实体和一个带有用户名的Comments列表。
现在我的问题是:我的视图不需要用户实体的每个细节,只需要显示帖子的名称。问题是我应该在哪里进行ViewModel和Model类之间的映射?业务层应该这样做吗?或者我应该返回包含每个细节的实体并让UI处理映射?业务层是否应将ViewModels包含为类库?
最佳方法是什么?
答案 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的例子,我推荐阅读这本书。