c# - 如果我们不在 API 中使用 DTO,会发生什么?
问题描述
例如:“学生”是领域模型,我直接在我的 API 操作方法中使用“学生”对象。
// Domain Model.
pubic class Student
{
public int Id { get; set; }
public string FirstName{ get; set; }
public string LastName { get; set; }
public string Gender{ get; set; }
public DateTime? BirthDate { get; set; }
}
//Simple API method that Add new student details to the database.
[HttpPost]
public IHttpActionResult GetStudents(Student student)
{
if (!ModelState.IsValid)
return BadRequest();
_context_.student.Add(student);
_context_.SaveChanges();
return Created(new Uri(Request.RequestUri + "/"), student.Id);
}
解决方案
- 您有机会将您的域模型公开给不受信任的客户端。
- 大多数情况下,DTO 更轻,导致传输的数据更少。
有时域模型包含复杂的类型。
public class Student { //... public ICollection<Course> Courses { get; set; } } public class Course { public int Id { get; set; } //... }
这可能无法满足客户。您必须序列化域对象或使用 DTO 来展平对象。
- 如果您不使用 DTO,您的 API 将随着您的域模型而发展。当您的 API 公开时,这可能会破坏您的外部消费者应用程序。
推荐阅读
- java - 获取 Spring Data JPA 中列的所有记录,即使我们将其指定为参数
- apache-kafka - 卡夫卡生产者超时
- angular - 您正在查找的页面无法显示,因为正在使用无效的方法(HTTP 动词)
- php - 如何使用 php 登录并将上下文流式传输到其他网站
- selenium - Protractor / Selenium XHR 保持“待定”状态
- c# - 相机切换机制
- cypress - 如何解决错误“'cypress' 不是内部或外部命令、可运行程序或批处理文件”。
- javascript - 将obj推送到arr时功能奇怪的输出
- python - 绘制图像的傅立叶变换时出现问题。“ValueError:x 和 y 不能大于 2-D,但具有 (2592,) 和 (2592, 1, 3) 形状”
- javascript - 使用jquery获取文本,它在span元素之后,不包括span之前的文本