DTO 和响应对象之间的区别?

5 .net c# architecture asp.net-core request-response

软件架构中响应对象和 DTO 有什么区别?假设我想获取目录中的产品列表。

如果 ProductDTO 是这样,那么 Product Response 类有何不同?产品响应通常只是一个带有日期时间、错误日志或 GUID 的包装,或者主要区别是什么?如果没有确切的或多个答案,想听听业界的主要原因。

public class ProductDto
{
    public int ProductId { get; set;},
    public string ProductName { get; set;},
    public string ProductDescription { get; set;},
    public float SalesAmount { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我尝试谷歌搜索这些答案,他们没有这个问题的具体答案,

对各种请求/响应类型重用 DTO 与明确需要什么/应该返回什么

每层的数据对象(DTO、实体、响应对象)

更新:

试图验证答案。看来 Rahul 的答案是回答 Domain object 和 DTO 之间的区别。Thought Response 是 DTO 的包装,不确定是否正确 -

http://themoderndeveloper.com/the-modern-developer/requesting-a-response/

现在发布在这里:

https://softwareengineering.stackexchange.com/questions/398783/what-is-difference- Between-dto-and-response-object

Rah*_*ate 10

ADTO (Data Transfer Object)是一个定义数据如何通过网络或应用程序发送的对象。另一方面Response Object,它通常保存来自 DTO 的响应数据或WebApi's or Data Access任何其他对客户端的响应。

Response Object通常包括特定对象的所有/少数属性,model or entity or DTO该特定对象通常是对象的子集DTO。请参阅下面的示例。

员工响应对象:

public class EmployeeResponseObject
{
     public int Id { get; set; }
     public string Name { get; set; }
     public string Designation { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

员工 DTO:

public class EmployeeDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Designation { get; set; }
    public decimal Salary { get; set; }
    public DateTime JoiningDate { get; set; }
    public decimal Tax { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以在这里看到。EmployeeResponseObject是 的子集,EmployeeDTO其中mean'sEmployeeResponseObject具有较少的属性EmployeeDTO。在少数情况下,我们不必将所有信息传递给最终客户端。因此我们将使用EmployeeResponseObject来获取所需的属性EmployeeDTO。您可以使用LINQ将数据投影到Response Objectfrom DTO

[ResponseType(typeof(EmployeeResponseObject))]
public EmployeeResponseObject GetEmployee()
{
    var employee = from e in dbContext.EmployeeDTO
                select new EmployeeResponseObject()
                {
                    Id = e.Id,
                    Name = e.Name,
                    Designation = e.Designation
                };    
    return employee;
}
Run Code Online (Sandbox Code Playgroud)

如果您仅用于EmployeeDTO传递信息,presentation layer/View, Webforms or ConsoleApp那么您的presentation layer/View意愿与您的domain layer. 所做的任何更改都DTO Objects需要您进行更改presentation layer or controllers,这不是一个好方法。

有时DTOResponse Objects会完全相同,那么为什么要使用单独的对象。这可能看起来是不必要的代码重复,但请考虑当您的项目变得更大时,特别是在一个大团队中,其中许多人在不同的应用程序层上一起工作。在这里使用DTO和 ,separate Response object对于良好的编程实践来说更有意义。当您跳过使用 时, 将会变得紧密Presentation layer/View耦合。domain layerResponseObject/ViewModelObject


Xav*_*rAM 2

据我所知,响应对象可以在 DTO 之上包含一个状态字段,该字段指示请求是否成功;或者如果没有,为什么失败了。

但我不太确定这是一个记录在案的规范。