n层应用程序的Web项目中的视图模型应该放在哪里?
Where view models inside Web project of n-tier application should be placed?
假设我们有一个具有以下层的 ASP.NET MVC 网络应用程序:
- 业务逻辑
- 实体(业务领域和数据库 POCO)
- 通用(资源、常量)
- 数据访问(数据库EF查询、EDMX EF模型等)
- Web 应用程序(MVC Web 应用程序)
我们正在使用视图模型方法。当前视图模型放置在实体层中。数据访问查询 returns 视图模型(由于效率问题,所以我们避免使用映射器)。
Web 层引用所有其他层。
数据访问引用公共层和实体层。
业务逻辑引用实体层和公共层,将来还会引用数据访问层。
有一个将视图模型移动到 Web 层的想法。为什么?因为它们实际上与特定技术 (MVC) 和 UI 实现绑定在一起。
但是我们在这里面临一个问题,因为在这种情况下数据访问层必须引用 Web 和 Web 引用数据访问,所以我们有一个循环依赖问题。
此外,我们还遇到了某些视图模型验证需要引用数据访问层的情况。我们将在视图模型中保留验证方法。目前我们想通过构造函数将数据库上下文class(在数据访问层中)注入到视图模型中来实现它。
你知道我们怎样才能避免它吗?将视图模型保留在我们的 Web 层中是个好主意吗?
我不确定如何在网络应用程序中使用 ViewModel
。据我所知,由于它的数据绑定性质,它比桌面应用程序更难。
但是,您的 Web 层直接引用数据层(或者更确切地说,直接访问)。除非它用于帮助简化 UI 而不是业务流程,否则它也破坏了 N 层的目的。
要保持设计简洁,您需要做的是制作 2 个不同的模型。 One for Entities model (Domain/data/business model) and another for view model。您的视图模型放置在 Web 层,当收到域模型时,它被映射到 Web 层。你不能避免在这里映射。
假设我们有一个具有以下层的 ASP.NET MVC 网络应用程序:
- 业务逻辑
- 实体(业务领域和数据库 POCO)
- 通用(资源、常量)
- 数据访问(数据库EF查询、EDMX EF模型等)
- Web 应用程序(MVC Web 应用程序)
我们正在使用视图模型方法。当前视图模型放置在实体层中。数据访问查询 returns 视图模型(由于效率问题,所以我们避免使用映射器)。
Web 层引用所有其他层。 数据访问引用公共层和实体层。 业务逻辑引用实体层和公共层,将来还会引用数据访问层。
有一个将视图模型移动到 Web 层的想法。为什么?因为它们实际上与特定技术 (MVC) 和 UI 实现绑定在一起。 但是我们在这里面临一个问题,因为在这种情况下数据访问层必须引用 Web 和 Web 引用数据访问,所以我们有一个循环依赖问题。
此外,我们还遇到了某些视图模型验证需要引用数据访问层的情况。我们将在视图模型中保留验证方法。目前我们想通过构造函数将数据库上下文class(在数据访问层中)注入到视图模型中来实现它。
你知道我们怎样才能避免它吗?将视图模型保留在我们的 Web 层中是个好主意吗?
我不确定如何在网络应用程序中使用 ViewModel
。据我所知,由于它的数据绑定性质,它比桌面应用程序更难。
但是,您的 Web 层直接引用数据层(或者更确切地说,直接访问)。除非它用于帮助简化 UI 而不是业务流程,否则它也破坏了 N 层的目的。
要保持设计简洁,您需要做的是制作 2 个不同的模型。 One for Entities model (Domain/data/business model) and another for view model。您的视图模型放置在 Web 层,当收到域模型时,它被映射到 Web 层。你不能避免在这里映射。