asp.net-web-api - Web API 是否需要有 ViewModels 层类?
问题描述
当我使用 Web (MVC) 时,我总是创建一个单独的类层。这些类通常与 DTO 类相同,但具有类似[Display(Name = "Street")]
和验证的属性。但是对于 web api 显示属性不是必需的,可以通过 FluentValidation 使用验证。Api 控制器是否应该返回 ViewModels 类或 DTO 类也可以?
解决方案
答案一如既往是....这取决于。
如果您的 API 服务于多个客户端、应用程序等,那么返回 DTO 是一个更好的选择。
ViewModel 是特定于 MVC 客户端的,应该已经准备好显示,这意味着数据应该已经以特定方式格式化,一些字段可以组合,它们应该满足显示页面的任何要求。出于某种原因,它们被称为 ViewNode。关键是它们很少与 API 返回的数据完全相同,这应该更通用一些,并遵循一定的模式以使其对用户有意义。
如果您的 ViewModel 完全相同并且您只有一个客户端,那么您是否要创建一组重复的分类只是为了避免具有属性,这取决于您。
从 DTO 到 ViewModel 的映射以及反之亦然并不复杂,但该过程确实引入了更多的复杂性,更多的层。
不过不要忘记一件事。无论任何 UI 的要求如何,API DTO 都应该返回它们在任何实体上的数据。无论如何,需求可能会发生变化,添加或丢弃新字段。发生这种情况时,您很可能不理会 API,而只需更改您的 ViewModel。
您的 ViewModel 特定于 UI 页面,并且应该只包含该页面所需的数据。这意味着您最终可以为相同的数据使用多个 ViewModel,只是每个的显示要求不同。
我的投票倾向于保持 ViewModel 和 DTO 分开,即使此时它们完全相同。事情总是在变化,这是您实际上可以准备好的事情之一。
推荐阅读
- php - 如何使用 reCaptcha 对机器人隐藏我网站上的 PDF 文件?
- java - Maven 在 Eclipse 中不起作用
- c# - 如何使用 C# 将多个参数传递给 Crystal Reports?
- css - 保持组件底部到顶部组件的 50%
- python - Excel 文件到 Python 字典
- python - 在数据之间插入逗号
- java - java.sql.SQLException:tomcat 8.5 上没有合适的驱动程序
- gcloud - 为什么单引号中的参数不能按预期在 Windows 上的 gcloud 中工作?
- java - 使用 Spring Boot 2.0 上传文件期间在套接字上读取意外的 EOF
- python - gameExit 未定义错误