在软件架构中,响应对象和DTO有什么区别?假设我想获取目录中的产品列表。
如果 ProductDTO 是这样,那么产品响应类有何不同?产品响应通常只是一个带有日期时间、错误日志或 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 实体 vs 响应对象(
更新:
尝试验证答案。似乎拉胡尔的答案是回答域对象和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
DTO (Data Transfer Object)
是一个对象,用于定义如何通过网络或应用程序发送数据。另一方面,Response Object
通常保存来自DTO或WebApi's or Data Access
的响应数据或对客户端的任何其他响应。
通常包括特定model or entity or DTO
的所有/少量属性的Response Object
,通常是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; }
}
现在你可以在这里看到。EmployeeResponseObject
是EmployeeDTO
的子集,这意味着EmployeeResponseObject
具有较少的EmployeeDTO
属性。在少数情况下,我们不必将所有信息传递给最终客户端。因此,我们将使用EmployeeResponseObject
从EmployeeDTO
获取所需的属性。 您可以使用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
这不是一个好方法。
有时DTO
和Response Objects
会完全相同,那么为什么要使用单独的对象。 这可能看起来是不必要的代码重复,但想想当你的项目变得更大时,特别是在一个大团队中,许多人在不同的应用程序层上一起工作。在这里,使用DTO
和separate Response object
对于良好的编程实践更有意义。Presentation layer/View
,当您跳过使用ResponseObject/ViewModelObject
时,domain layer
将变得紧密耦合。
据我所知,响应对象可以在 DTO 顶部包含一个状态字段,该字段指示请求是否成功;如果没有,则指示请求失败的原因。
但我不太确定这是一个有据可查的规范。