应该放置n层应用程序的Web项目中的视图模型?

时间:2015-04-03 11:29:04

标签: .net asp.net-mvc architecture

假设我们有一个包含以下层的ASP.NET MVC Web应用程序:

  • 业务逻辑
  • 实体(业务域和数据库POCO)
  • 共同(资源,争议)
  • 数据访问(数据库EF查询,EDMX EF模型等)
  • Web应用程序(MVC Web应用程序)

我们正在使用视图模型方法。目前,视图模型位于“实体”层中。数据访问查询返回视图模型(由于效率问题,因此我们避免使用mapper)。

Web图层引用所有其他图层。 数据访问引用Common和Entities层。 业务逻辑引用实体和公共层,将来也是数据访问层。

有一个想法将视图模型移动到Web层。为什么?因为它们实际上与特定技术(MVC)和UI实现绑定在一起。 但是我们在这里面临一个问题,因为在这种情况下,数据访问层必须引用Web和Web引用数据访问,因此我们有一个循环依赖问题。

此外,我们有一些场景,当视图模型的某些验证需要引用数据访问层时。我们将在视图模型中保留验证方法。目前我们希望通过注入数据库上下文类(在数据访问层中)来通过构造函数来查看模型来实现它。

你知道我们怎么能避免它?将视图模型保留在Web层中是不是一个好主意?

1 个答案:

答案 0 :(得分:3)

我不确定如何在网络应用中使用ViewModel。 AFAIK由于具有数据绑定特性,因此比桌面应用程序更难。

但是,您的网络层直接引用数据层(或者更确切地说,直接访问)。除非它用于帮助简化UI而不是业务流程,否则它将打破N层的目的。

为保持设计清洁,您需要做的是制作2种不同的型号。 One for Entities model (Domain/data/business model) and another for view model。您的视图模型位于Web层,当收到域模型时,它将映射到Web层。你无法避免这里的映射。