Camada Facade!

Srs.

Pelo que entendi a camada (empacotamento) Facade, serve para agrupar classes que possuiem um senso comun.
Tipo: Posso criar uma classe chamada TabelasFacade, onde vai unificar todas as classe que manipula tabelas (bairro, cidade, moeda, nascionalidade, tipo de historicio,… )do sistema. E ter outra clase Facade chamada CadastrosFacde para unificar todos os cadastros (cliente, fornecedor, produto, vendedor, …) do sistema, é isso ?

Nao… num é isso nao…

Imagine que vc tenha que trabalhar com um sistema bem complexo… que possua várias classes…

Trabalhar com essas varias classes poderia tornar dificil o trabalho

Entao é criada uma única interface para trabalhar com o conjunto de classes… essa interface é a Facade

Faz mais sentido ter um ClienteFacade… do que um TabelasFacade…

E no caso que eu tenho umas 15 classes de tabelas auxiliares do sistema, cada uma é uma Facade ?

Pelo que você comentou na Facade é unificado processos. Tipo: CadastrarCliente( cadastra cliente, o dependente, os contatos e referêmcias dele), é isso ?

Você poderia passar um exemplo pratico do dia-a-dia ?

Acredito que principalmente o Facade é utilizado para fazer uma camadas comunicar-se com outra subajdacente.

Esta comunicação não resume-se apenas a integração, mas tambem, uma forma de encapsular essas chamadas para facilitar e diminuir o acoplamento entre objetos.

Att…

[quote=getulio.gomes]E no caso que eu tenho umas 15 classes de tabelas auxiliares do sistema, cada uma é uma Facade ?

Pelo que você comentou na Facade é unificado processos. Tipo: CadastrarCliente( cadastra cliente, o dependente, os contatos e referêmcias dele), é isso ?

Você poderia passar um exemplo pratico do dia-a-dia ?[/quote]

É mais ou menos isso… nao tenho um exemplo aqui… pq nao costumo usar Facade… :smiley:

O padrão Facade é muito utilizado quando há uma regra de negócio que para ser executada perpassa vários subsistemas, num cenário normalmente complexo. Imagine, por exemplo, uma aplicação bancária que quer consultar o saldo de um determinado cliente.

...
Cliente cliente  = ... // Instanciação de cliente
FabioRichBankFacade facade = ...// Instanciação do Facade
Double saldo = facade.consultarSaldo(cliente);
...

Daí esse facade vai chamar um método de um EJB remoto para, digamos, para verificar o cliente, e em seguida chamar outro EJB para consultar o saldo que por sua vez tem uma ligação com uma rotina de um mainframe e por aí vai…

Uma dica: procure entender o problema que o padrão de projeto se propõe a resolver ao invés de se apegar a nomes pomposos ou implementações específicas de plataforma. Um Singleton, por exemplo, pode ser implementado de maneira diferente em Java e Ruby. Aliás até mesmo em Java você pode implementar de maneiras diferentes.
Muita gente cai no erro de usar os padrões GoF ou Java EE porque são “bonitos” e acabam tornando o sistema mais complexo do que deveria.

Exatamente!!

[quote=fabiocsilva]O padrão Facade é muito utilizado quando há uma regra de negócio que para ser executada perpassa vários subsistemas, num cenário normalmente complexo. Imagine, por exemplo, uma aplicação bancária que quer consultar o saldo de um determinado cliente.
[/quote]

Acrescentaria apenas que podemos utilizar o facade, tambem, para organizar e fazer com que os objetos de outras camadas não tenha acesso ‘direto’ a implementação de determinadas funcionalidades. Um bom exemplo são as classes JasperManager do JasperReport, pois incapsulam a forma, e tambem, separa a comunicação entre as camadas necessarias para geração de relatorios.

Concordo em genero e grau, sempre devemos ver um padrão pelo optica de como resolver um problema utilizando-o, mas não procurar uma forma de utilizá-lo!!!