ASP.NET MVC + EF 4.1 分层、模型、 View 模型

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

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

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

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

现在我的问题是:我的 View 不需要用户实体的所有详细信息,只需要名称即可显示帖子。问题是我应该在哪里进行 ViewModel 和 Model 类之间的映射?业务层应该这样做吗?或者我应该返回包含所有详细信息的实体并让 UI 处理映射?业务层是否应该包含 ViewModel 作为类库?

最好的方法是什么?

最佳答案

The question is where should I do the mapping between my ViewModels and Model classes?

最好是在单独的映射层中。如果您使用AutoMapper映射可以在 ASP.NET MVC 项目中的单独文件中声明。

Should the business layer do this?

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

Should the business layer contain ViewModels as a class library?

没有。 UI 层(ASP.NET MVC 应用程序)是唯一了解 View 模型的层。如果您愿意,它们当然可以位于单独的类库中,但只有 UI 层才应该引用它。 View 模型与 View 紧密耦合。 View 是 UI 的一部分。

关于ASP.NET MVC + EF 4.1 分层、模型、 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7951941/

相关文章:

c# - 我可以使用什么 JavaScript 代码在新窗口中打开,而不是我之前打开的窗口

javascript - 使用 JavaScript 基于值的 ASP.NET 条件格式

c# - 在 Entity Framework 中区分 MySQL 和 SQL Server

asp.net-mvc - EF 恢复的对象中的空属性

c# - 将所有发布的字符串修剪为 API ASP.NET CORE 3.x

c# - VSTS/TFS 设置环境变量 ASP.NET core

asp.net-mvc - 扩展 AuthorizeAttribute 覆盖 AuthorizeCore 或 OnAuthorization

asp.net-mvc-3 - IoC 的泛型关注点分离

asp.net-mvc-3 - MVC3 中文本框的验证

sql-server - Sql Server 数据库连接字符串中的初始目录是什么意思?