# Business delegate

Business delegate é um padrões de projeto da engenharia de software, utilizado para aplicativos multicamadas. O padrão projeto de Delegação de Negócio do inglês "Business Delegate" é usado para separar a camada de apresentação/externa das regras/lógicas de negócio. A razão para utilizar essa abordagem é reduzir o acoplamento entre as camadas, porque o alto acoplamento pode causar vários problemas no projeto, recomendado na Java EE como padrão de projeto.
O acoplamento alto geralmente impede uma boa manutenção, gera o desenvolvimento adicional das várias camadas, dificulta substituição dos componentes de tecnologia. Além disso, a camada de apresentação fica instável para grandes mudanças na camada de negócios. Para evitar isso, o modelo de design/projeto "Business Delegate" é indicado. Este padrão oculta os detalhes internos da implementação da lógica de negócios (por exemplo, consulta de JNDI , RMI , acesso a EJBs, Gerente/Manager de objetos afins ) para a camada de apresentação. Como o nome delegador sugere, aqui as funções de acesso são encapsuladas e encaminhadas.
A vantagem é que a camada de apresentação pode ser trocada mais facilmente, o que é especialmente útil para diferentes dispositivos. A classe Business Delegate também pode armazenar os resultados em memoria, desta forma melhorar significativamente o poder de computação. também as exceções muito técnicas podem ser convertidas em exceções mais fáceis de entender para o usuário.
Caso preciso ser feitas alterações na implementação da camada de negócios, não será mais necessário alterar todos os elementos da camada de apresentação, mas apenas as classes de delegação de negócios.
Geralmente, há também uma classe de interface de negócios nesse contexto, que especifica as funcionalidades disponíveis das classes Business Delegate para a próxima camada. Isso possibilita fornecer várias/dimensões da implementação do padrão de delegação de negócios.
Diferenças do padrão Façade, este padrão é genérico para unificar uma invocação. É um padrão para diminuir invocações, simplificar o de API. A sua função principal não é desacoplamento embora isso possa decorrer naturalmente. O Business Delegate é um padrão JEE e funciona como um agente destacado um Manager. É um objeto que conhece o negocio mas não está no disponível no servidor, ele sabe como e o quê delegar ao servidor. Ele está mais para Mediator, mas do ponto de vista do cliente ele parece um Façade por também ficar entre o servidor.
O Façade é genérico, o Business Delegate é especifico para arquitetura JEE e normalmente faz orquestração de objetos com o servidor e não apenas invocar métodos de negocio.
Não é correto dizer que um Business Delegate é um Façade, mas também não é correto dizer que não pareça com Façade. São dois padrões de "mundos" diferentes. Então eles estão relacionados concetualmente, embora não tenham nada em comum na hora de implementar.

## Código de exemplo

Um código de exemplo para um Aplicativo de Serviços Profissionais (PSA), no qual um cliente da camada da Web precisa acessar um bean de sessão que implementa o padrão de fachada da sessão, é implementado conforme abaixo.
Resource Delegate:
Remote interface for ResouceSession: