Design Patterns J2EE - Business Delegate
----------------------------------------
Demorou mas saiu!
Nome: Business Delegate
Outros nomes: Client Facade, Session Proxy
Contexto: Aplica��o cliente necessita acessar servi�os de uma Session Facade (poderia ser qualquer outro tipo de EJB, mas � bom para que percebam como os patterns se relacionam)
Problema: V�rios passos s�o necess�rios para a utiliza��o dos servi�os da Session Facade (ou qualquer outro EJB). Veja na classe abaixo:
/**
* Cliente que N�O USA Business Delegate
* @author alegomes
*/
class ClienteSemBusinessDelegate
{
void metodo()
{
//Passsos para a utiliza��o dos servi�os de uma Session Facade
Context ctx = new InitialContext();
Object ref = ctx.lookup("SessionFacade");
SessionFacadeHome home = (SessionFacadeHome)
PortableRemoteObject.narrow(ref, SessionFacadeHome.class);
SessionFacade sf = home.create();
sf.servico1();
}
}
Esta sequ�ncia de tarefas, al�m de tornar complexa a aplica��o cliente, cria depend�ncias diretas entre a camada de apresenta��o e a tecnologia utilizada na camada de neg�cios. Caso fosse necess�rio alterar a tecnologia dos componentes de neg�cios, toda a aplica��o cliente haveria de sofrer modifica��es, pois aquele c�digo � espec�fico para EJB.
Solu��o: Ocultar da aplica��o cliente todos os detalhes espec�ficos da tecnologia utilizada na constru��o dos componentes de neg�cio.
+---------+ +----------+ +---------+
| | | | | |
| Cliente | -----> | Business | -----> | Session |
| | | Delegate | | Facade |
+---------+ +----------+ +---------+
Consequ�ncias:
+ Maior desacoplamento entre as camadas
+ Simplifica o c�digo cliente
+ Incrementa a performance na medida em que se pode implementar mecanismos de cache no Business Delegate
Estrat�gias: Para cada Session Facade, implementar uma classe local com a mesma interface de servi�os.
Exemplo:
/**
* Session Facade * @author alegomes
*/
class SessionFacade implements SessionBean
{
//m�todos ejb
//m�todos de neg�cio
void servico1()
{
//Implementa��o do servi�o 1 }
void servico2()
{
//Implementa��o do servi�o 2
}
}
/**
* Business Delegate
* @author alegomes
*/
class BusinessDelegate
{
SessionFacadeHome home;
//Construtor
BusinessDelegate()
{
Context ctx = new InitialContext();
Object ref = ctx.lookup("SessionFacade");
home = (SessionFacadeHome)PortableRemoteObject.narrow(ref, SessionFacadeHome.class);
}
//m�todos de neg�cio
void servico1()
{
SessionFacade sf = home.create();
sf.servico1();
}
void servico2()
{
SessionFacade sf = home.create();
sf.servico2();
}
}
/**
* Cliente que USA Business Delegate para realiza��o de "metodo"
* @author alegomes
*/
class ClienteComBusinessDelegate
{
BusinessDelegate bd;
ClienteComBusinessDelegate()
{
bd = new BusinessDelegate();
}
void metodo()
{ bd.servico1();
}
}
Usando o Business Delegate, o c�digo cliente s� enxerga invoca��es locais, e toda a complexidade das chamadas remotas ficam ocultas dentro dele. Al�m de facilitar o desenvolvimento da aplica��o cliente, o uso do Business Delegate desata as amarras entre as camada de apresenta��o e a tecnologia da camada de neg�cio. Caso haja a necessidade de migrar de EJB para qualquer outra tecnologia de componentes de neg�cios, a aplica��o cliente permaneceria intacta, ficando as consequ�ncias limitadas apenas nos Business Delegates.
Pr�ximo design pattern J2EE: Service Locator
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)
