← Back to home

Facade

By Pscodium · 8/4/2026 · 2 views

Facade

O Facade fornece uma interface simples para um sistema complexo.

Imagine um processo de compra:

Validar estoque
Processar pagamento
Calcular frete
Criar pedido
Enviar email

O cliente não deveria precisar conhecer todos esses serviços.

Sem Facade:

inventory.check();

payment.process();

shipping.calculate();

order.create();

email.send();

Isso deixa o código cliente muito acoplado.

Criamos uma Facade:

class CheckoutFacade {

  constructor(
    private inventory: Inventory,
    private payment: Payment,
    private shipping: Shipping,
    private order: Order
  ) {}

  checkout(
    productId: string,
    amount: number
  ) {
    this.inventory.check(
      productId
    );

    this.payment.process(
      amount
    );

    this.shipping.calculate();

    this.order.create(
      productId
    );
  }
}

Agora o cliente faz apenas:

const checkout =
  new CheckoutFacade(
    inventory,
    payment,
    shipping,
    order
  );

checkout.checkout(
  "product-123",
  100
);

O cliente conhece apenas:

CheckoutFacade

E não precisa conhecer todos os subsistemas.


Exemplo real

Uma Facade é muito comum em APIs.

Por exemplo:

class UserService {

  async register(
    data: UserData
  ) {
    const user =
      await database.createUser(
        data
      );

    await email.sendWelcome(
      user.email
    );

    await analytics.track(
      "user_created"
    );

    return user;
  }
}

O Controller chama:

userService.register(
  data
);

O Controller não precisa saber todos os detalhes internos.


Quando usar?

Facade é útil quando:

  • Um sistema possui muitos subsistemas.
  • Queremos simplificar uma API complexa.
  • Precisamos reduzir acoplamento.
  • Queremos criar uma entrada única para uma operação complexa.

A ideia principal é:

Esconder a complexidade de um sistema atrás de uma interface simples.



Comments

No comments yet.