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

Difference between DTO and Response Object?

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

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

public class ProductDto
{
    public int ProductId { get; set;},
    public string ProductName { get; set;},
    public string ProductDescription { get; set;},
    public float SalesAmount { get; set;}
}

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

Data Objects for each layer(DTO vs Entity vs Response objects)

更新:

正在尝试验证答案。似乎 Rahul 的回答是回答 Domain object 和 DTO 之间的区别。 Thought Response 是 DTO 的包装器,不确定是否为 true-

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

现在发布在这里:

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

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

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

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

Response Object 通常包含特定 model or entity or DTO 的 all/few 属性,通常是 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 将数据从 DTO.

投影到 Response Object
[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 完全相同那么为什么要使用单独的对象。 这可能看起来是不必要的代码重复,但是当你的项目变得更大时,特别是在一个大团队中,许多人在不同的应用程序层上一起工作时,想想看。这里使用 DTOseparate Response object 更适合良好的编程习惯。当您跳过 ResponseObject/ViewModelObject.

时,Presentation layer/Viewdomain layer 将变得紧密耦合