繁体   English   中英

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

[英]Where view models inside Web project of n-tier application should be placed?

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

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

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

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

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

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

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

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

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

为保持设计清洁,您需要做的是制作2种不同的型号。 一个用于实体模型(域/数据/业务模型),另一个用于视图模型 您的视图模型位于Web层,当收到域模型时,它将映射到Web层。 你不能避免这里的映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM