首页 > 解决方案 > DTO和响应对象之间的区别?

问题描述

软件架构中的响应对象和 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;}
}

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

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

每层的数据对象(DTO vs Entity vs Response 对象)

更新:

试图验证答案。似乎 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

标签: c#.netasp.net-corearchitecturerequest-response

解决方案


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; }    
}

员工 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; }
}

现在你可以在这里看到。EmployeeResponseObjectEmployeeDTO其中均值EmployeeResponseObject具有较少属性的子集EmployeeDTO。在少数情况下,我们不必将所有信息传递给最终客户端。所以我们将使用EmployeeResponseObjectEmployeeDTO. 您可以使用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;
}

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

有时DTO并且Response Objects会完全相同,那么为什么要使用单独的对象。这可能看起来是不必要的代码重复,但想想当你的项目变得更大时,特别是在一个大团队中,许多人在不同的应用程序层上一起工作。在这里使用DTOseparate Response object通过良好的编程实践更有意义。Presentation layer/Viewdomain layer您跳过使用ResponseObject/ViewModelObject.


推荐阅读