Objeto de Transferência de Dados (do inglês, Data transfer object, ou simplesmente DTO),[1][2] é um padrão de projeto de software usado para transferir dados entre subsistemas de um software. DTOs são frequentemente usados em conjunção com objetos de acesso a dados para obter dados de um banco de dados.[1][2]
A diferença entre objetos de transferência de dados e objetos de negócio ou objetos de acesso a dados é que um DTO não possui comportamento algum, exceto o de armazenamento e obtenção de seus próprios dados. DTOs são objetos simples que não contêm qualquer lógica de negócio que requeira testes.[1]
Em uma arquitetura EJB tradicional, os DTOs servem para dois propósitos: primeiro, contornar o problema que entidades do EJB não são serializáveis; segundo, eles definem implicitamente uma fase de montagem onde todos os dados que serão usados para apresentação passam por marshalling antes de irem efetivamente para a camada de apresentação. Uma terceira razão para usar DTOs é que camadas não-adjacentes à camada de dados da aplicação não podem acessar estes objetos e modificá-los.