Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho estudado esse padrão "Facade" e não entendi alguns itens desse patten que são:
1. Quando é que devo pensar em criar esse padrão em meu projetos?
2. Quais as responsabilidade desse padrão?
3. Que tipo de métodos o facade terá?
Muitos dizem que o Façade (tem uma cedilha no C) serve pra esconder uma lógica complexa mas na minha opinião ele mais intermeia uma tarefa que requeira muitas lógicas complexas, lógicas essas que residem em classes específicas, cada qual com suas próprias responsabilidades.
O SourceMaking, agora repaginado, tem um exemplo bem fácil de entender, mesmo estando em inglês.
Nele você vê como objetivo inverter o case das letras de uma determinada string (no caso, o título de um livro). Toda a lógica para se executar essa tarefa, presente em CaseReverseFacade::reverseStringCase() poderia ser feita manualmente, num único bloco de código enorme, toda vez que fosse necessário (ignorando os princípios do DRY).
Como cada classe tem uma responsabilidade única, cada pequena tarefa foi divida (até demais pro meu gosto) para ser futuramente reutilizada, talvez, e tudo que fosse necessário para resolver o problema proposto, foi "embalado" num único método, de uma único classe para ser invocado numa única linha.
O padrão facade tem como objetivo fornecer uma interface para acesso a todos os recursos do sistema numa única classe.
Se deve pensar em usar esse padrão quando se tem muitas entidades no sistema, com muitas tarefas "iguais", para não ter que estanciar as classes específicas, apenas estanciar a fachada e ter todos os recursos nesse objeto.
O facade terá todos os métodos de suas classes, ex.
___________________________________________________
Classe CarroCadastro, Métodos -> inserir(), deletar(), editar(), excluir()
Classe ClienteCadastro, Métodos -> inserir(), deletar(), editar(), excluir()
Classe VendaCadastro , Métodos -> inserir(), deletar(), editar(), excluir()
FACADE, Métodos ( inserirCarro, deletarCarro, editarCarro, excluirCarro(), inserirCliente(), deletarCliente(), editarCliente(), excluirCliente(), inserirvenda(), deletarVenda(), editarVenda(), excluirVenda() )
A Facade estancia todas as classes e faz a chamada de todos os métodos dentro dela.
Dessa forma você não precisa ficar estanciando CarroCadastro, ClienteCadastro, VendaCadastro, toda vez que for fazer uma lógica de CRUD, apenas instancia a FACADE e você terá todo o conteudo das outras classes nela.
Já que a facade instancia várias classes, dessa forma usando muito carregamento, é interessante usar o padrão de Projeto Singleton, pois não sei se você conhece mais esse padrão não deixa existir mais de uma instancia da facade ou qualquer classe que seja.
Foi uma explicação muito overview, mais espero que tenha ajudado em algo.