Design Patterns J2EE - Session Facade
----------------------------------------

Olá amigos, por razões estratégicas, ao contrário do anunciado, vamos apresentar o design pattern Session Facade na sequência. Ele
facilitará a apresentação posterior do Business Delegate.

Nome : Session Facade

Outros nomes: não achei. Deve ser consenso :-)

Contexto: Às vezes, a realização de um caso de uso envolve a
invocação de diversos EJBs.

Problema: O alto índice de chamadas remotas traz prejuízos à
performance da aplicação.

Solução: Ocultar a alta interatividade entre EJBs, através de
interfaces locais, atrás de um único método remoto.

Consequências:
+ Menos invocações remotas
+ Simplifica a interface de serviços remotos para o cliente, disponibilizando um ponto central para a realização de um caso de uso
+ Desacoplamente entre as camadas de apresentação e negócio, uma vez
que todas os relacionamentos e dependências entre as entidades envolvidas
na realização do caso de uso ficam transparentes ao cliente.

Estratégias: Implementar um session bean stateless com serviços de
alto nível de granularidade

Exemplo:
/**
* Cliente que NÃO USA Session Facade
* @author alegomes
*/
class ATM
{
void transferenciaEntreContas(long c1, long c2)
{
//Lookup e find do EJB ContaCorrente de origem
//Lookup e find do EJB ContaCorrente de destino
ejbCCOrigem.sacar(valor);
ejbCCDestino.depositar(valor);
}
}

/**
* Cliente que USA Session Facade
* @author alegomes
*/
class ATM
{
void transferenciaEntreContas(long c1, long c2)
{
//Lookup e find da Session Facade OperacoesBancarias
sf.transferir(c1, c2);
}
}

/**
* Session Facade
* @author alegomes
*/
public class OperacoesBancarias implements SessionBean
{
//ejbMetodos

/**
* Método único que o cliente deve chamar para realizar
* transferência de fundos entre contas correntes.
*/
public void transferir (long c1, long c2)
{
//Lookup e find do EJB ContaCorrente de origem
//Lookup e find do EJB ContaCorrente de destino
ejbCCOrigem.sacar(valor);
ejbCCDestino.depositar(valor);
}
}

À primeira vista, pela simplicidade do exemplo, talvez se tenha
tido alguma decepção quanto aos reais benefícios do uso do pattern. Entretanto, imaginem que no mundo real a transferência entre contas
não é apenas tirar de um lugar e por no outro, mas envolve também a autenticação do usuário, validação das contas (bloqueadas, saldo suficiente), geração de logs etc. Quando este volume de passos começa
a crescer é que efetivamente percebemos o quão importante é implementar uma fachada de serviço de alto nível de granularidade a fim de
facilitar o desenvolvimento por parte do cliente, reduzir o acomplamento entre as camadas e diminuir o overhead relativo ao grande número de chamadas remotas que estariam sendo realizadas.

Observações: Pessoal, quisera eu detalhar aqui todas as nuâncias relativas à aplicação deste e outros design patterns. Infelizmente,
por questões de espaço (e tempo), isto não é possível. Considerem estas dicas apenas como catalizadores para o início de um longo processo de aprendizado. Conforme consta abaixo, na assinatura do email, todas as dicas podem ser discutidas no MundoOO. Incentivo também o uso da enterprise-list, do SouJava, para a resolução de dúvidas e obtenção
de maiores detalhes práticos relativos ao tema.

Próximo design pattern J2EE: Business Delegate (agora sim)

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