8 de julio de 2013

Transfer Object

Es uno de los patrones más utilizado. Se utiliza para la comunicación, transporte e intercambios de datos negocio especialmente útil en aplicaciones distribuidas.
Se implementa con un objeto que extiende la interfaz Serializable. Es una representación estado/valor de un objeto y se utiliza para encapsular datos de negocio. Se trata de un JavaBeans, con los atributos propios del objeto de dominio con carácter privado, y métodos get y set para acceder y modificar sus valores.
Existen varios enfoques de este patrón. Cuando el Transfer Object modela una tabla relacional y los atributos de la clase son los campos de la tabla, se está utilizando un Domain Value Object. Si se encapsulan atributos de varias tablas, creando una clase que combine sólo los atributos requeridos, se está utilizando un Custom Value Object.
Este patrón, en el contexto JDBC, nos permite representar un conjunto de atributos procedentes de uno o varios objetos de dominio; en el contexto EJB representa eficiencia. Sin embargo, hay que tener cuidado en el diseño porque hay casos en el que puede contener información obsoleta.

Las aplicaciones de la plataforma J2EE implementan componentes de negocio del lado del servidor como beans de sesión y de entidad. Algunos métodos expuestos por los componentes de negocio devuelven datos al cliente. Algunas veces, el cliente invoca a los métodos get de un objeto de negocio varias veces para obtener todos los valores de los atributos.
Los beans de sesión representan los servicios de negocio y no se comparten entre usuarios. Un bean de sesión proporciona métodos de servicios genéricos cuando se implementan para el patrón Session Facade.
Por otro lado, los beans de entidad, son objetos transacionales, multiusuario que representan datos persistentes. Un bean de entidad expone los valores de los atributos proporcionando un método accesor (también referidos como métodos get) por cada atributo que desea exponer.
Toda llamada a método hecha al objeto de servicio de negocio, ya sea a un bean de entidad o a un bean de sesión, potencialmente es una llamada remota. Así, en una aplicación de JavaBeans Enterprise (EJB) dichas llamadas remotas usan la capa de red sin importar la proximidad del cliente al bean, creando una sobrecarga en la red. Las llamadas a métodos de beans enterprise podría penetrar las capas de red incluso si tanto el cliente como el contenedor EJB que mantiene el bean de entidad se están ejecutando en la misma JVM (Máquina Virtual Java), el mismo Sistema Operativo o máquina física. Algunos vendedores podrían implementar mecanismos para reducir esta sobrecarga utilizando una aproximación de acceso más directa pasando por encima de la red.
Según se incrementa la utilización de estos métodos remotos, el rendimiento de la aplicación se puede degradar significativametne. Por lo tanto, utilizar varias llamadas a métodos get que devuelven simples valores de atributos es ineficiente para obtener valores de datos desde un bean enterprise.

Todos los accesos a un bean enterprise se realizan mediante interfaces remotas. Cada llamada a un bean enterprise potencialmente es una llamada a un método remoto con sobrecarga de red.
Normalmente, las aplicaciones tienen transacciones de lectura con mayor frecuencia que las de actualización. El cliente solicita los datos desde la capa de negocio para su presentación, y otros tipos de procesamientos de sólo-lectura. El cliente actualiza los datos de la capa de negocio con mucha menos frecuencia con la que los lee.
El cliente normalmente solicita valores que son algo más que un atributo o que son dependientes del objeto de un bean enterprise. Así, el cliente podría invocar varias llamadas remotas para obtener los datos necesarios.
El número de llamadas que un cliente hace al bean enterprise impactan en el rendimiento de la red.
Al utilizar un Transfer Object que encapsula los datos de negocio, se utiliza una única llamada a un método para enviar y recuperar el Transfer Object. Cuando el cliente solicita los datos de negocio al bean enterprise, éste puede construir el Transfer Object, rellenarlo con sus valores de atributos y pasarlo por valor al cliente.
Los clientes normalmente solicitan más de un valor a un bean enterprise. Para reducir el número de llamadas remotas y evitar la sobrecarga asociada, es mejor el Transfer Objects para transportar los datos desde el bean enteprise al cliente.
Cuando un bean enterprise utiliza un Transfer Object, el cliente hace una sola llamada a un método remoto del bean enterprise para solicitar el Transfer Object en vez de numerosas llamadas remotas para obtener valores de atributos individuales. Entonces el bean enterprise construye un nuevo ejemplar Transfer Object, copia dentro los valores del objeto y lo devuelve al cliente. El cliente recibe el Transfer Object y puede entonces invocar los métodos accesores (o get) del Transfer Object para obtener los valores de atributos individuales del objeto Transfer Object. O, la implementación del Transfer Object podría hacer que todos los atributos fueran públicos. Como el Transfer Object se pasa por valor al cliente, todas las llamadas al ejemplar Transfer Object son llamadas locales en vez de invocaciones de métodos remotos.
·         Estructura (diagrama de clases)


·         Diagrama de secuencia




No hay comentarios:

Publicar un comentario