“Fornecer uma interface unificada para um conjunto de interfaces em um subsistema. Facade define uma interface de nível mais alto que torna o subsistema mais fácil de ser usado.”
Facade é um padrão de design estrutural que permite fornecer uma interface simplificada para um sistema complexo de classes, biblioteca ou estrutura.
- Estrutura Básica:
- Exemplo Customer Service (Alto Nível):
-
Imagine um código que precisa trabalhar com um grande conjunto de objetos de alguma biblioteca ou estrutura complexa. Você precisa inicializar manualmente todos esses objetos, controlar as dependências, a ordem correta e assim por diante.
No final, a lógica de negócios de suas classes se tornam fortemente acopladas aos detalhes de implementação de uma biblioteca de terceiros. Esse código é muito difícil de compreender e manter.
-
O Facade (Fachada) é uma classe que fornece uma interface simples para um subsistema complexo contendo dezenas de classes. A fachada pode ter funcionalidade limitada em comparação com o trabalho direto com o subsistema. No entanto, inclui apenas os recursos que os clientes realmente se importam.
O Facade é útil quando você usa uma biblioteca sofisticada com muitas partes móveis, mas precisa apenas de uma fração de sua funcionalidade.s
- Isola clientes de componentes do subsistema.
- Minimiza o acoplamento entre o código do cliente e o subsistema.
- Facede (Fachada) corre o risco de se tornar um objeto divino(god object anti-pattern), acoplado a todas as classes de aplicativos.
⛔ - Quando você precisa ter uma interface simples, mas limitada, para um subsistema complexo.
✔️ - Frequentemente, os subsistemas se tornam mais complexos ao longo do tempo. Mesmo a aplicação de padrões de design geralmente leva à criação de mais classes. O subsistema pode se tornar mais flexível e mais fácil de reutilizar em diferentes contextos, mas a quantidade de código padrão requer também cresce. O Facade tenta consertá-lo fornecendo acesso a uma fração de um subsistema que atenda às necessidades dos clientes.
⛔ - Quando você deseja estruturar um subsistema em camadas.
✔️ - Crie fachadas para definir pontos de entrada para cada nível de um subsistema. Se vários subsistemas dependerem um do outro, você poderá limitar o acoplamento, exigindo que os subsistemas se comuniquem apenas por meio de fachadas.