我读了几篇与 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/