现在我的项目有几层:Core <> Repository <> API... 我将构建一个“客户端”MVC Web 项目层。我的问题是——视图模型在这个架构中属于哪里?
Web项目的控制器方法是否应该调用API(多次-getTheseObjects、getThoseObjects)来获取数据,然后构建viewModel?或者 API 是否应该支持调用来构造 viewModel,以便应用程序的每个页面只需要进行一次 API 调用 (getAllObjectsForThisPage)?
现在我的项目有几层:Core <> Repository <> API... 我将构建一个“客户端”MVC Web 项目层。我的问题是——视图模型在这个架构中属于哪里?
Web项目的控制器方法是否应该调用API(多次-getTheseObjects、getThoseObjects)来获取数据,然后构建viewModel?或者 API 是否应该支持调用来构造 viewModel,以便应用程序的每个页面只需要进行一次 API 调用 (getAllObjectsForThisPage)?
您的视图模型将属于您的客户端 MVC 应用程序。它们将特定于该单个客户端应用程序中的视图,并且通常由域对象填充。这就是它的工作方式:控制器调解 https 请求,从而调用 API 端点并接收一些数据或域对象,然后您使用这些数据或域对象来填充您的视图模型。
如果您从 api 返回域对象,请查看automapper ,它确实有助于将域对象映射到视图模型。
您可以将 ViewModel 放入您的 MVC 应用程序中,但您可以创建称为 DTO(数据转换对象)的东西并将其从 Web API 返回到您的客户端。本质上,它将是一个只包含您传递给客户端的必要信息的类。如果您想调用该 ViewModel,您不妨继续这样称呼它。我的建议是拨打一个电话并返回所有必要的信息。一打电话一程。
我的做法通常是将 ViewModel 从 MVC 中分离出来,并将其存储在其他项目中。服务层将准备一个 ViewModel 并将其返回给 MVC。这样做的原因是,一旦我需要在 MVC 完成后构建 WPF 应用程序。移动东西并重新测试一切以确保它仍然可以正常工作是一件非常痛苦的事情。