Design Patterns J2EE - Value Object
--------------------------------------

Sem d�vida este � o design pattern J2EE mais famoso que temos. Por ser o
primeiro a ser apresentado, irei refor�ar a import�ncia da correta
compreens�o do modelo que estamos utilizando para a descri��o de cada
padr�o. Detalhes sobre este modelo est�o no email anterior, que pode ser
encontrado em http://www.mail-archive.com/dicas-list@;soujava.org.br/.  Vamos
ao pattern:

Nome : Value Object

Outros nomes: Detail Object, Data Transfer Object, Replicate Object

Contexto: Aplica��o cliente necessita trazer grande quantidade de
informa��es de um servi�o remoto.

Problema: Buscar uma informa��o por vez tem um custo de rede e performance
extremamente alto.

Solu��o: Trazer todos os dados de uma s� vez, em uma �nica requisi��o de
rede, em um objeto chamado Value Object.

Consequ�ncias:
+ Menos invoca��es remotas
+ Simplifica a interface remota e sua implementa��o
- Se n�o tomar cuidado, os dados carregados por um VO podem tornar-se
inv�lidos.

Estrat�gias: Implementar um JavaBean com todos os atributos que devem ser
transportados "numa �nica viagem".

Exemplo:
/**
 * Classe cliente de um session bean qualquer
 * @author alegomes
 */
class Cliente
{
    void lerDadosRemotos()
    {
        Object ref = InitialContext.lookup("MeuSession");
        MeuSessionBeanHome home = PortableRemoteObject.narrow(ref,
MeuSessionBeanHome.class);
        MeuSessionBean bean = home.create();

        /* Ao inves de fazermos isso, que envolve v�rias conex�es de
rede.....
         * atr1 = bean.getAtributo1();
         * atr2 = bean.getAtributo2();
         * atr3 = bean.getAtributo3();
         *  (....)
         */

        /* ....fazemos isto, que trar� o mesmo conjunto de  informa��es
         *     com apenas 1 chamada remota:
         */
         atr = bean.getValueObject();
    }
}

/**
 * Interface remota do session bean
 * @author alegomes
 */
public interface MeuSessionBean extends EJBObject
{
    /* N�o precisa mais desses m�todos:
     * public String getAtributo1() throws RemoteException;
     * public String getAtributo2() throws RemoteException;
     * public String getAtributo3() throws RemoteException;
     *
     * Declara apenas um:
     */

    public ValueObjectQualquer getValueObject() throws RemoteException;
}

/**
 * Implementa��o do ValueObject
 * @author alegomes
 */
public class ValueObjectQualquer implements Serializable
{
    private String atributo1;
    private String atributo2;
    private String atributo3;
    (...)

    public void setAtributo1(String a)
    {
        atributo1 = a;
    }

    public String getAtributo1()
    {
        return atributo1;
    }

    (....) /* gets e sets para os outros atributos */
}

Observa��es: Originalmente, o Value Object tinha entity beans como principal
ponto de utiliza��o, ou seja, ao inv�s de fazermos diversos gets e sets para
obter e modificar todos os atributos do entity, poder�amos buscar ou
submeter todas as informa��es com uma �nica chamada de rede, atrav�s do VO.
Entretanto, a partir da especifica��o EJB 2.0, com a presen�a das interfaces
locais, a "exig�ncia" de um Value Object para cada entity bean acabou caindo
no desuso, pois o overhead de rede foi naturalmente eliminado. Em
contrapartida, a id�ia do Value Object ainda permanece ativa sempre que se
falar no transporte da muitas informa��es entre dois n�s da sua arquitetura.

Pr�ximo design pattern J2EE: Business Delegate

Bons patterns !!!

Alexandre Gomes
Sou Jedi, Sou Java!


================================================================================
[dicas-list] circula diariamente com pequenas dicas sobre a plataforma Java e �
mais um servi�o da Sociedade de Usu�rios Java - http://www.soujava.org.br
      *** SouJava - Fortalecendo a Comunidade Java Brasileira! ***
- Para contribuir com uma dica, envie um e-mail para [EMAIL PROTECTED]
- Participe de outras listas de discuss�o sobre a linguagem Java.
  Saiba mais em http://www.soujava.org.br/lista.htm
--------------------------------------------------------------------------------
- Para assinar este boletim: mailto:dicas-list-subscribe@;soujava.org.br
- Para cancelar sua assinatura: mailto:dicas-list-unsubscribe@;soujava.org.br
- Dicas anteriores: http://www.mail-archive.com/dicas-list%40soujava.org.br
- Para discutir sobre as dicas, acesse o Mundo OO (http://www.mundooo.com.br)


Responder a