Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我们在API中不使用DTO会发生什么?_C#_Asp.net Web Api - Fatal编程技术网

C# 如果我们在API中不使用DTO会发生什么?

C# 如果我们在API中不使用DTO会发生什么?,c#,asp.net-web-api,C#,Asp.net Web Api,例如:Student是域模型,我在API操作方法中直接使用Student对象 // Domain Model. pubic class Student { public int Id { get; set; } public string FirstName{ get; set; } public string LastName { get; set; }

例如:Student是域模型,我在API操作方法中直接使用Student对象

        // 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就是它的意思,数据传输对象。除非您的视图有不同的需求,否则使用基于DTO的模型是可以的

这很好,因为DTO就是它的意思,数据传输对象。除非您的视图有不同的需求,否则使用基于DTO的模型是可以的

您有机会向不受信任的客户端公开域模型。 大多数情况下,DTO较轻,因此传输的数据较少。 有时域模型包含复杂的类型

public class Student
{
    //...
    public ICollection<Course> Courses { get; set; }
}
public class Course
{
    public int Id { get; set; }
    //...
}
这可能无法使客户满意。您必须序列化域对象或使用DTO展平对象

如果您不使用DTO,您的API将随着您的域模型而发展。当您的API为公共API时,这可能会破坏您的外部消费者应用程序。 您有机会向不受信任的客户端公开域模型。 大多数情况下,DTO较轻,因此传输的数据较少。 有时域模型包含复杂的类型

public class Student
{
    //...
    public ICollection<Course> Courses { get; set; }
}
public class Course
{
    public int Id { get; set; }
    //...
}
这可能无法使客户满意。您必须序列化域对象或使用DTO展平对象

如果您不使用DTO,您的API将随着您的域模型而发展。当您的API为公共API时,这可能会破坏您的外部消费者应用程序。
这真的会在将来为你节省时间。我的意思是,如果您正在开发真正的长期解决方案,您必须使用DTO,并使您的代码更加结构化。你必须有不同的层。像数据层、表示层、业务层等,所有这些层都应该是独立的。如果使用DTO,则可以创建更多特定的实体。不会混淆您的业务逻辑

我也看到了这一点。也许它会给你一些DTO可以帮助你的例子

DTO数据传输对象是用于移动数据的数据容器 在层之间。它们也称为传递对象。DTO只是 用于传递数据,不包含任何业务逻辑。他们只是 拥有简单的二传手和接球手


这真的会在将来为你节省时间。我的意思是,如果您正在开发真正的长期解决方案,您必须使用DTO,并使您的代码更加结构化。你必须有不同的层。像数据层、表示层、业务层等,所有这些层都应该是独立的。如果使用DTO,则可以创建更多特定的实体。不会混淆您的业务逻辑

我也看到了这一点。也许它会给你一些DTO可以帮助你的例子

DTO数据传输对象是用于移动数据的数据容器 在层之间。它们也称为传递对象。DTO只是 用于传递数据,不包含任何业务逻辑。他们只是 拥有简单的二传手和接球手


1.您正在公开您的内部域2。如果学生有您不想发送给客户端的字段,该怎么办?比如说,你还想用什么?我不明白你的问题。希姆布罗姆比尔。。。我在问这个!在上面的例子中,student是一个域模型,我在api操作方法中使用student对象。。。例如,如果我创建一个dto,而不是使用student对象,我就是studentDTO!!!!那么,这两种方法之间的确切区别是什么呢?我是asp.web api的新用户。。{我很困惑}.1。您正在公开您的内部域2。如果学生有您不想发送给客户端的字段,该怎么办?比如说,你还想用什么?我不明白你的问题。希姆布罗姆比尔。。。我在问这个!在上面的例子中,student是一个域模型,我在api操作方法中使用student对象。。。例如,如果我创建一个dto,而不是使用student对象,我就是studentDTO!!!!那么,这两种方法之间的确切区别是什么呢?我是asp.web api的新用户。。{我很困惑}。我认为这一定不是一个好词。编程中没有什么是必须的。DTO不是必须的。当然,我的意思不是用域对象代替DTO。另外,分层体系结构并不是所有情况下都能成功的秘诀。@MichałK.是的,这一点很好。但使用分层体系结构是长期项目成功的标准之一。使用DTO是使用分层架构的一个例子。我不同意。并非所有长期运行的项目都必须具有分层体系结构。你应该看Jimmy Bogard谈论垂直切片架构。它绝对美丽而简单。这是一个最好的部分-他有Github的完整的解决方案如何。所以这不仅仅是理论上的@米夏克,当然由你决定。不管你想要什么。如果你不同意“必须”这个词,我可以改变它!你不必改变你的观点,见鬼,你甚至不必看演讲。我刚才给你们举了一个不那么分层的架构的例子,这让我很惊讶。不多不少我不认为那一定是好事
d这个词。编程中没有什么是必须的。DTO不是必须的。当然,我的意思不是用域对象代替DTO。另外,分层体系结构并不是所有情况下都能成功的秘诀。@MichałK.是的,这一点很好。但使用分层体系结构是长期项目成功的标准之一。使用DTO是使用分层架构的一个例子。我不同意。并非所有长期运行的项目都必须具有分层体系结构。你应该看Jimmy Bogard谈论垂直切片架构。它绝对美丽而简单。这是一个最好的部分-他有Github的完整的解决方案如何。所以这不仅仅是理论上的@米夏克,当然由你决定。不管你想要什么。如果你不同意“必须”这个词,我可以改变它!你不必改变你的观点,见鬼,你甚至不必看演讲。我刚才给你们举了一个不那么分层的架构的例子,这让我很惊讶。不多不少