Roberto Umbelino
21/11/2020 Roberto Umbelino

Facade pattern de forma rápida

blog-feature-image

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-facade (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.

  1. ❌ Acoplar a chamada para o serviço externo dentro do saveOrder.
  2. ❌ Fazer de forma separada, forçando o consumidor a chamar o saveOrder e o sendOrderToExternalService.

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:


“A cada bug uma nova lição aprendida.” 🧐

Roberto Umbelino.

comments powered by Disqus

NOS ACOMPANHE NAS REDES SOCIAIS