【问题标题】:Difference between DTO and Response Object?DTO和响应对象之间的区别?
【发布时间】:2023-03-30 17:28:01
【问题描述】:

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

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

Reusing DTO for various request/response types vs explicitness of what is required / what should be returned

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

更新:

试图验证答案。似乎 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# .net asp.net-core architecture request-response


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

    Response Object 通常包含特定 model or entity or DTO 的所有/少数属性,该特定 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 将数据从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 将变得紧密耦合。

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 2017-01-16
      • 2017-03-11
      • 2012-01-12
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 2010-11-11
      • 2014-10-19
      相关资源
      最近更新 更多