Galera o que é um façade?

Olá galera

Eu procurei na net definições por façade e fala que façade é um objeto que disponibiliza uma interface para uma grande quantidade de funcionalidades de uma API.

Bom o que seria na prática

Me corrijam se eu entendi errado

em um sistema de vendas, eu tenho a classe Cliente, Funcionário, Produto, o façade dessa classe seria uma classe Vendas que teria dentro dela um cliente, um funcionário e vários produtos?

Att.

vamos supor que para um funcionario vender um produto para um cliente vc teria de verificar se o cliente nao esta inadimplente, para isso teria de fazer consulta em diversas api ou serviços.

entao vc cria uma fachada que simplifica todo esse processo

ex:

Cliente seuCliente = new Cliente(1);

SistemaDoBanco sistemaDoBanco = new SistemaDoBanco(seuCliente);

SistemaDeEmprestimo sistemaDeEmprestimo = new SistemaDeEmprestimo(seuCliente);

if(!sistemaDoBanco.isClienteInadimplente()  && !sistemaDeEmprestimo.clienteDeveDinheiro()) {
   // vende
}

com fachada vc encapsula todas as particularidades do SistemaDoBanco e do SistemaDeEmprestimo e demais consultas futuras.

public class EmailService() {

   private Cliente cliente;
   
   private SistemaDoBanco sistemaDoBanco;
   
   private SistemaDeEmprestimo sistemaDeEmprestimo;
   
   private ClasseDeConsultaQualquer objetoDeConsultaQualquer;

   public ConsultaInadimplencia(Cliente cliente) {
      this.cliente = cliente;
      
      // instancia sistemas
   }
   

   public Boolean isInadinplente() {
	   if(!sistemaDoBanco.isClienteInadimplente() && !sistemaDeEmprestimo.deveDinheiro() && !objetoDeConsultaQualquer.isClienteDevedor()) {
		   return false;
	   } else {
		   return true;
	   }
   }
    
}

abrasssssssss

Para mais informações pesquise sobre o padrão de projeto facade, segue um link sobre o mesmo:

http://www.pg.cefetpr.br/coinf/simone/patterns/facade.php

valos lá

Li o artigo e a resposta

Agora preciso de uma ajuda de vocês novamente

Eu vou dar monitoria de java para o terceiro ano e o professor passou esse facade pra galera, e está sendo o terror dos cara hehe, mvc e tals, mvc eu já sei, só que esse façade eu nunca tinha ouvido falar

Eu pretendo passar um projetinho simples de cadastro de cliente, funcionário, produto e vendas, com interface gráfica e acesso ao banco de dados

Tenho uma classe Pessoa, clinte e funcionários herdam Pessoa e tem seus atributos respectivos.

A classe Produto tem o valor do produto, nome e código

A classe Venda tem a quantidade de produtos vendidos, o código do cliente e o código do vendedor

O sistema só irá calcular o valor total da venda e salvar no banco

Agora a dúvida, como eu implementaria o façade ae?

A classe Venda já seria considerado um façado por tratar de métodos como cálculoDaVenda e coisas do tipo?

Humm pensei em algo que parece ser um façade hehehe

Ex.

A classe vendas precisa ter o Atributo cliente, Produto e Funcionário, em vez de eu adicionar esses atributos direto na classe vendas eu crio um Façade com todos esses atributos e pela classe Vendas eu acesso o Façade com todos esses atributos

Seria isso um façade?

Att.

[quote=brunorota]Olá galera

Eu procurei na net definições por façade e fala que façade é um objeto que disponibiliza uma interface para uma grande quantidade de funcionalidades de uma API.

Bom o que seria na prática

Me corrijam se eu entendi errado

em um sistema de vendas, eu tenho a classe Cliente, Funcionário, Produto, o façade dessa classe seria uma classe Vendas que teria dentro dela um cliente, um funcionário e vários produtos?

Att.[/quote]
Façade é um objeto/classe que serve como uma interface de suporte entre o banco de dados e a camada visão, onde geralmente é tratado tudo equivalente à tratamento de dados na parte servidor(camada de negocio)
Me corrijam se estiver errado.

Humm então por exemplo, eu tenho minhas classesDAO que carregam os objetos e tals, em vez de eu chamar os métodos dessas classes DAO eu crio um façade que tera métodos que ira conter tudo que eu preciso para preencher os dados, por exemplo uma tabela, ou em vez de eu chamar um método direto pra adicionar um cliente, eu passo esse cliente pro façade e ele faz a ligação com as classes DAO

É isso mesmo?

Façade seria uma simplificação de um sistema através de uma interface mais enxuta.

Por exemplo se vc tiver algumas classes que precisam ser instânciadas para realizar uma determinada tarefa em conjunto, vc teria um trabalho maior para realizar essa tarefa, e teria que conhecer em detalhes todas as classes e seu métodos necessários para realizar a tarefa, vc pode simplificar a vida de quem vai ter que usar essa tarefa, criando uma fachada que faz todo esse trabalho a um nivel maior, sem que o cliente precise saber os detalhes, ao mesmo tempo que ainda permite que ele continue acessando as classes de nível mais baixo

Humm já ta clareando a idéia hehe

então um exemplo de façada, seria a efetuação de uma venda, que precisa ter um objeto cliente, funcionário e um array de produto

Faço um façade para vendas que teria os métodos nos quais utilizam 3 objetos diferentes e quando eu for cadastrar a venda eu só chamo esse objeto façade q auxília no serviço

Estou correto?

A facade serve para encapsular a aplicação!

segue aii >

[code]public class fachadaAplicacao {

public fachadaAplicacao(){   
     Aplicacao ap = new Aplicacao();   
}   
   
 public void setMoeda(int a, String b){   
       
    ap.setMoeda(a,b);                 
 }   

public Moeda getMoeda(String id){   
     ap.getMoeda(id);   
}   

(…)

} [/code]

VALEU!

[quote=renanreismartins]vamos supor que para um funcionario vender um produto para um cliente vc teria de verificar se o cliente nao esta inadimplente, para isso teria de fazer consulta em diversas api ou serviços.

entao vc cria uma fachada que simplifica todo esse processo

ex:

Cliente seuCliente = new Cliente(1);

SistemaDoBanco sistemaDoBanco = new SistemaDoBanco(seuCliente);

SistemaDeEmprestimo sistemaDeEmprestimo = new SistemaDeEmprestimo(seuCliente);

if(!sistemaDoBanco.isClienteInadimplente()  && !sistemaDeEmprestimo.clienteDeveDinheiro()) {
   // vende
}

com fachada vc encapsula todas as particularidades do SistemaDoBanco e do SistemaDeEmprestimo e demais consultas futuras.

public class EmailService() {

   private Cliente cliente;
   
   private SistemaDoBanco sistemaDoBanco;
   
   private SistemaDeEmprestimo sistemaDeEmprestimo;
   
   private ClasseDeConsultaQualquer objetoDeConsultaQualquer;

   public ConsultaInadimplencia(Cliente cliente) {
      this.cliente = cliente;
      
      // instancia sistemas
   }
   

   public Boolean isInadinplente() {
	   if(!sistemaDoBanco.isClienteInadimplente() && !sistemaDeEmprestimo.deveDinheiro() && !objetoDeConsultaQualquer.isClienteDevedor()) {
		   return false;
	   } else {
		   return true;
	   }
   }
    
}

abrasssssssss[/quote]

cara esse if ta orriver hein, vc nem precisa dele…

public Boolean isInadinplente() {
   return sistemaDoBanco.isClienteInadimplente() || sistemaDeEmprestimo.deveDinheiro() || objetoDeConsultaQualquer.isClienteDevedor()
}

e acredito que o || se encaixaria melhor no if :smiley:

@Felagund

perfeita sua observação!