首页 > 解决方案 > 如果我们不在 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);
       }

标签: c#asp.net-web-api

解决方案


  1. 您有机会将您的域模型公开给不受信任的客户端。
  2. 大多数情况下,DTO 更轻,导致传输的数据更少。
  3. 有时域模型包含复杂的类型。

    public class Student
    {
        //...
        public ICollection<Course> Courses { get; set; }
    }
    public class Course
    {
        public int Id { get; set; }
        //...
    }
    

这可能无法满足客户。您必须序列化域对象或使用 DTO 来展平对象。

  1. 如果您不使用 DTO,您的 API 将随着您的域模型而发展。当您的 API 公开时,这可能会破坏您的外部消费者应用程序。

推荐阅读