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)