c# - 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 vs Entity vs Response 对象)
更新:
试图验证答案。似乎 Rahul 的答案是回答 Domain object 和 DTO 之间的区别。Thought Response 是 DTO 的封装,不确定是否属实-
http://themoderndeveloper.com/the-modern-developer/requesting-a-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; }
}
现在你可以在这里看到。EmployeeResponseObject
是EmployeeDTO
其中均值EmployeeResponseObject
具有较少属性的子集EmployeeDTO
。在少数情况下,我们不必将所有信息传递给最终客户端。所以我们将使用EmployeeResponseObject
从EmployeeDTO
. 您可以使用LINQ
将数据投影到Response Object
from 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
会完全相同,那么为什么要使用单独的对象。这可能看起来是不必要的代码重复,但想想当你的项目变得更大时,特别是在一个大团队中,许多人在不同的应用程序层上一起工作。在这里使用DTO
并separate Response object
通过良好的编程实践更有意义。Presentation layer/View
当domain layer
您跳过使用ResponseObject/ViewModelObject
.
推荐阅读
- azure - 什么是天蓝色角色?
- vba - For循环覆盖数组内的数据
- python - Django 中的自定义上传处理程序
- ios - .Clipped() 不适用于 Pickers SwiftUI
- bit-manipulation - 当按位与 & 运算大于或等于按位异或 ^ 运算时?
- c# - 使用 caliburn micro 和 fluent Validation 通过按钮进行验证
- azure - IntelliJ IDEA azure ARM 模板智能感知
- python - 如何在 pytorch 中为 ppc64le 架构安装 torchmeta?
- botframework - botframework v4 自定义标题和最小化网络聊天
- python - Tensorflow model.evaluate 给出与训练得到的结果不同的结果