数据传输对象
在电脑编程中,数据传输对象 (data transfer object,DTO[1][2])是在2个进程中携带数据的对象。因为进程间通信通常用于远程接口(如web服务)的昂贵操作。[2]成本的主体是客户和伺服器之间的来回通信时间。为降低这种调用次数,使用DTO聚合本来需要多次通信传输的数据。[2]
DTO与业务对象或数据访问对象的区别是:DTO的数据的变异子与访问子(mutator和accessor)、语法分析(parser)、序列化(serializer)时不会有任何存储、获取、序列化和反序列化的异常。即DTO是简单对象,不含任何业务逻辑,但可包含序列化和反序列化以用于传输数据。[1]即DTO仅包含数据,不包含任何逻辑(logic)和行为(behavior)。逻辑(logic)和行为(behavior)指该类型的方法。对于C#,DTO只包含属性(property),这些属性只能读(get)、写(set)数据,不能对属性做验证(validate)或执行其他操作。
向DTO添加元数据以使其支持模型验证或类似目的的情况并不罕见。这不会向DTO本身添加任何行为,而是使能系统其他地方行为。 因此,它们并没有违反DTO不应包含任何行为的“规则”。
术语
值对象不是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.0 1.1 MSDN (2010). Data Transfer Object. Microsoft MSDN Library. Retrieved from https://msdn.microsoft.com/en-us/library/ms978717.aspx (页面存档备份,存于互联网档案馆).
- ^ 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 (页面存档备份,存于互联网档案馆).