E aí galera, blz?
Bom estou desenvolvendo uma aplicação em camadas e estou adaptando ela com os patterns acima mencionados.Bom minhas dúvidas são as seguinte:
- Vcs fazem um Facade para cada Business Delagate?
- Vcs usam o Facade para controle de transações?
- O Facade serve para encapsular os casos de uso?
Por exemplo:
Tenho um frame de cadastro de funcionários que cadastra o funcionário e os telefones dele.daí quando click num botão gravar, por exemplo, ele cria o objeto funcionário com suas depedência(telefones), passa para o Business Delegate e este passa para o Facade, que por sua vez caha a classe de regra de negócio de funcionário para gravar o Funcionário e a regra de negócio de telefones para gravar os telefones daquele funcionário.
Por tenho mais perguntas mais por enquanto é “só”… :oops:
A Paz!!
Aproveito para postar uma dúvida também.
Já autores de algumas revistas especializadas em java colocarem o Business Delegate como um espécie de Factory.
ex:
// pode ser um servico EJB, Web Service, RMI, etc
class Funcionarios
{
}
class BusinessDelegate
{
public Funcionarios getFuncionarios()
{
return (Funcionarios) ServiceLocator.get(SERVICO_FUNCIONARIOS);
}
}
Funcionarios funcionarios = BusinessDelegate.getFuncionarios();
funcionarios.inserir();
É lógico que um exemplo bem simplório, mas dá para passar o que estou querendo dizer.
Mas em outros lugares dão exemplos de Business Delegate como uma classe que criar as instancias internamente e possuem métodos que chamam métodos das classes de serviço.
ex:
// pode ser um servico EJB, Web Service, RMI, etc
class Funcionarios
{
}
class BusinessDelegateFuncionarios
{
Funcionarios funcionarios;
public BusinessDelegateFuncionarios()
{
funcionarios = (Funcionarios) ServiceLocator.get(SERVICO_FUNCIONARIOS);
}
public void inserir()
{
funcionarios.inserir();
}
}
BusinessDelegateFuncionario bdFuncionarios = new BusinessDelegateFuncionario();
bdFuncionarios.inserir();
O que é mais coerente ?
Para mim faz muito mais sentido o Business Delegate do segundo exemplo, pois, como o nome diz, ele deve DELEGAR.
Um BD deveria oferecer métodos que fazem o “serviço sujo”, são ser uma Factory de Façades.
Existe uma técnica exposta no livro UML Components sobre façades encapsulando casos de uso. Não é nada muito limpinho, mas é funcional em alguns contextos (desde que você saiba limpar o excesso de interfaces inúteis).
Então vamos ver se entendi…
O Business Facade só me passaria a “referência” para o Facade, no primeiro exemplo?!
A Paz!!
[quote=paulohbmetal]
O Business Facade só me passaria a “referência” para o Facade?![/quote]
Não. Considere um EJB Façade (argh!). Considere um cliente Web.
Como você faz o clietne usar o servidor? XYZJaponeixRemoteInterface?
Que tal se você pudesse fazer:
meuBusinessDelegateComUmNomeHorrivel.atualizar(japoneix);
E ele simplesmente se conectar ao EJB, passar parâmetro. Toda a macumbada RMI (ou até decidir se ela é necessária ou não…) com apenas um método simples para seu cliente? Fora a flexibilidade, use HTTP em vez de RMI e mdue só o BD e o façade 
[quote=pcalcado]Um BD deveria oferecer métodos que fazem o “serviço sujo”, são ser uma Factory de Façades.
Existe uma técnica exposta no livro UML Components sobre façades encapsulando casos de uso. Não é nada muito limpinho, mas é funcional em alguns contextos (desde que você saiba limpar o excesso de interfaces inúteis).[/quote]
Pois é, eu tenho medo de virar esta tranqueira… 
Mas e aí, seria o caso de controlar minhas transações aí, no facade?!
A Paz!!
O que, em termos gerais, não deixa de ser um Proxy.
[quote=pcalcado][quote=paulohbmetal]
O Business Facade só me passaria a “referência” para o Facade?![/quote]
Não. Considere um EJB Façade (argh!). Considere um cliente Web.
Como você faz o clietne usar o servidor? XYZJaponeixRemoteInterface?
Que tal se você pudesse fazer:
meuBusinessDelegateComUmNomeHorrivel.atualizar(japoneix);
E ele simplesmente se conectar ao EJB, passar parâmetro. Toda a macumbada RMI (ou até decidir se ela é necessária ou não…) com apenas um método simples para seu cliente? Fora a flexibilidade, use HTTP em vez de RMI e mdue só o BD e o façade ;)[/quote]
É, isso mesmo que estou querendo fazer… Daí meu Business Delegate irá abstrair toda a rotina de chamada ou instanciação do Facade para o view, e também serviria para repassar a requisição.
Blz, mas e no caso do exemplo que dei, como vcs tratam as dependências?!Eu buscaria o funcionário e depois buscaria seus telefones?Pois afinal de contas, são regras de negócio diferentes…
A Paz!!