DTO和响应对象有什么区别?

4

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

如果ProductDTO是这样的,那么Product Response类有什么不同?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 以用于不同的请求 / 响应类型 vs 明确需要什么 / 应该返回什么

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

更新:

尝试验证答案。看起来 Rahul 的答案回答了领域对象和 DTO 之间的区别。虽然响应是 DTO 的包装器,但不确定是否正确。

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

现在发布在这里:

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

2个回答

8

DTO(数据传输对象)是一个定义如何在网络或应用程序中传输数据的对象。另一方面,响应对象通常保存来自DTO、WebApi或数据访问等其他响应的响应数据。

响应对象通常包含特定模型、实体或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 的子集,这意味着 EmployeeResponseObjectEmployeeDTO 少一些属性。在某些情况下,我们不必将所有信息传递给最终客户端。因此,我们将使用 EmployeeResponseObjectEmployeeDTO 中获取所需的属性。 您可以使用 LINQ 将数据投影到 Response Object 中,从而从 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,这不是一个好的做法。
有时DTOResponse Objects将完全相同,那么为什么要使用不同的对象呢?这看起来可能是无用的代码复制,但是当你的项目变得越来越大,尤其是在一个大型团队中,许多人一起在应用程序的不同层上工作时,使用DTO和单独的Response object具有良好的编程实践意义。当你跳过使用ResponseObject/ViewModelObject时,Presentation layer/Viewdomain layer将变得紧密耦合。

1

据我所见,Response对象可以在DTO之上包含一个状态字段,指示请求是否成功;如果没有成功,则说明失败的原因。

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


谢谢,似乎与这个答案一致:https://softwareengineering.stackexchange.com/questions/398783/what-is-difference-between-dto-and-response-object - user12093268
Agreed Response对象包含DTO和一些属性来指示状态(如错误或成功消息)。 - Ivandro Jao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接