Transfer Object

Transfer Object

Transfer Object(Objecto de Transferência) é um padrão de pretende aumentar a granularidade de acesso e transferencia de dados entre camadas e/ou nodos.

Antigamente este padrão era chamado de Value Object, mas hoje em dia esse nome tem outro significado.
Um outro sinónimo para Transfer Object é Data Transfer Object mais conhecido como DTO.

O problema

Você está invocando um método que necessita um numero muito grande de parametros.
Uma situação pior é quando surge a necessidade de retornar uma grande quantidades de valores.
Poderiamos usar um array, mas essa não é uma solução eficaz já que normalmente os dados são de tipos diferentes.

Se o método for invocado remotamente o problema se agrava. Então não será apenas o fator relativo
a passar , ou receber, tantos parametros, mas o facto de que cada um será serializado individualmente.

A solução

A solução é muito simples e quase que empirica. Cria-se um objeto que agrupa os valores necessários.
O único “truque” é que esse objeto tem que implementar Serializable para que possa
ser utilizado remotamente.
Por exemplo em vez de

1
2 public void criaPessoa ( String primeiroNome, String ultimoNome , Date dataNascimento ) ;

Código 1:

criariamos um objeto pessoa e usariamos assim


1
2 public class Pessoa implements Serializable {
3 String primeiroNome;
4 String ultimoNome;
5 Date dataNascimento;
6 }
7
8 public void criaPessoa ( Pessoa pessoa ) ;

Código 2:

Implementação

A implementação, como vimos, é simples. Basta criar um objeto com os atributos necessários. Essa classe tem que ser Serializable se for usada remotamente.
O algoritmo de serialização pode ser alterado para criar otimizações. Por exemplo, se
tivermos que passar vários objetos de um mesmo tipo , poderiamos utilizar uma coleção.
Em particular podemos saber – conforme as regras do modelo – que essa coleção pode conter várias copias do
mesmo objeto. Ao serializar podemos gravar apenas uma copia e ao deserializar crias as outras com métodos de copia.
Um outro exemplo é utilizar uma serilização em formato Zip ou GZip se o objeto contêm muitos dados, particularmente se o objeto contêm muito texto.

Referências

[1]

Sun Microsystems

URL:

http://java.sun.com/blueprints/patterns/TransferObject.html

Licença


Creative Commons License
Sérgio Taborda

Este trabalho é licenciado sob a


Licença Creative Commons Atribuição-Uso Não-Comercial-Não a obras derivadas 3.0 Genérica
.

3 opiniões sobre “Transfer Object”

    1. Trafico de rede é uma operação de I/O. Toda a operação de I/O é sincrona. Ou seja, sempre que vc transfere byes vc o faz de forma que o seu sistema para completar esse trabalho. Mesmo com multiplas threads , a thread para enquanto o processo acontece. O seu sistema parado afeta a performance. Quanto mais eficiente o seu objeto é em termos de transferencia menos eles afeta a performance. Quanto mais “gordo” o seu objeto é m ais ele ocupa recursos de transferencia, e é isso que vc quer evitar. Em geral vc sempre deve minimizar operações de I/O para deixar seu sistema rápido.

Deixe um comentário