Facade pattern de forma rápida

Fala galeeeraaa, esse será o primeiro post de uma nova série chamada “De Forma Rápida”, que terá como intuito dar uma breve introdução de um tema.
📑 Sobre
Usado para ajudar os consumidores, o Facade provê uma interface para que seja possível de forma simples fazer o uso de funcionalidades complexas sem ter a necessidade de saber detalhes de implementação.
Talvez fique mais claro através dessa imagem:
(Estrutura do Facade.)
⭐ Exemplo
Vamos a um exemplo para ter uma ideia do que se trata o Facade.
Em uma API existe uma rota para criação de Pedidos saveOrder
, inicialmente ela apenas cria um pedido no banco de dados.
Até aí tudo Ok, certo? 🤔
Porém, futuramente foi solicitado para que quando salvar um pedido seja enviado o registro do pedido para um serviço externo.
Aqui entram duas situações.
- ❌ Acoplar a chamada para o serviço externo dentro do
saveOrder
. - ❌ Fazer de forma separada, forçando o consumidor a chamar o
saveOrder
e osendOrderToExternalService
.
Ambas as situações são ruins, sendo que uma acaba gerando acoplamento e a outra complexidade para uso da funcionalidade. ❌
O Facade vem para solucionar isso.
Nesse exemplo é criado uma interface que abstrai essa compelxidade para ambos os lados. A partir de agora o consumidor usará o saveOrderFacade
e essa interface irá implementar o saveOrder
e o sendOrderToExternalService
dessa forma não há acoplamento nas funcionalidades.
No código ficaria algo nesse estilo:
const saveOrder = async (order) => { ... }
const sendOrderToExternalService = async (order) => { ... }
export const saveOrderFacade = async (order) => {
await saveOrder(order)
await sendOrderToExternalService(order)
}
Como você pode perceber, nós encapsulamos a complexidade e os passos necessários que compõem o fluxo para salvar um pedido.
Prontinho! Agora você tem uma ideia do que é o Facade. ✌️
🔗 Referências
Você pode estudar uma pouco mais do assunto nos links:
- https://pt.wikipedia.org/wiki/Fa%C3%A7ade
- https://refactoring.guru/pt-br/design-patterns/facade
- https://medium.com/@gbbigardi/arquitetura-e-desenvolvimento-de-software-parte-12-facade-2a5ed5209325
“A cada bug uma nova lição aprendida.” 🧐
comments powered by DisqusRoberto Umbelino.