跳转到内容

数据传输对象

本页使用了标题或全文手工转换
维基百科,自由的百科全书

计算机编程中,数据传输对象 (data transfer object,DTO[1][2])是在2个进程中携带数据的对象。因为进程间通信通常用于远程接口(如web服务)的昂贵操作。[2]成本的主体是客户和服务器之间的来回通信时间。为降低这种调用次数,使用DTO聚合本来需要多次通信传输的数据。[2]

DTO与业务对象英语business object数据访问对象的区别是:DTO的数据的变异子与访问子(mutator和accessor)、语法分析(parser)、序列化(serializer)时不会有任何存储、获取、序列化和反序列化的异常。即DTO是简单对象,不含任何业务逻辑,但可包含序列化和反序列化以用于传输数据。[1]即DTO仅包含数据,不包含任何逻辑(logic)和行为(behavior)。逻辑(logic)和行为(behavior)指该类型的方法。对于C#,DTO只包含属性(property),这些属性只能读(get)、写(set)数据,不能对属性做验证(validate)或执行其他操作。

向DTO添加元数据以使其支持模型验证或类似目的的情况并不罕见。这不会向DTO本身添加任何行为,而是使能系统其他地方行为。 因此,它们并没有违反DTO不应包含任何行为的“规则”。

术语

值对象英语value object不是DTO。过去Sun/Java环境曾把二者混为一谈。[2]

例子

public class ProductViewModel
{
  public int ProductId { get; set; }
  public string Name { get; set; }
  public string Description { get; set; }
  public string ImageUrl { get; set; }
  public decimal UnitPrice { get; set; }
}

参考文献

  1. ^ 1.0 1.1 MSDN (2010). Data Transfer Object. Microsoft MSDN Library. Retrieved from https://msdn.microsoft.com/en-us/library/ms978717.aspx页面存档备份,存于互联网档案馆).
  2. ^ 2.0 2.1 2.2 2.3 Fowler, Martin (2010). Data Transfer Object. Patterns of Enterprise Application Architecture. Retrieved from http://martinfowler.com/eaaCatalog/dataTransferObject.html页面存档备份,存于互联网档案馆).

外部链接