DEV Community

Arthur Freitas
Arthur Freitas

Posted on

1

Dominando o Design Pattern Facade: Simplifique a Integração de Sistemas!

Descomplicando Integrações com o Design Pattern Facade

Saudações, Devs! 👋 Hoje vamos explorar o Design Pattern Facade, mostrando como ele pode ser eficaz para simplificar a comunicação com operações complexas e externas e internas, como o processamento de pagamentos em plataformas de terceiros.

O Que Torna o Facade Tão Impactante? 🧠

O Design Pattern Facade é crucial por vários motivos, especialmente quando lidamos com integrações externas:

  • Simplificar a comunicação: Facilita a interação com APIs de pagamento complexas e diversas.
  • Diminuir o acoplamento: Reduz a dependência do código cliente com APIs externas, permitindo fácil substituição ou adição de novos serviços de pagamento.
  • Facilitar modificações: Permite adaptar-se rapidamente a mudanças nas APIs de pagamento sem grandes alterações no código base.

Implementação Prática em TypeScript: Processamento de Pagamentos 📝

Vamos adaptar nosso cenário para incluir a comunicação com softwares de pagamento externos, como Stripe, PayPal, e serviços bancários para transferências.

Passo 1. Definindo Interfaces de Métodos de Pagamento

Adaptamos nossa interface para refletir a comunicação com serviços externos:

interface ExternalPaymentService {
  processPayment(amount: number): Promise<string>;
}
Enter fullscreen mode Exit fullscreen mode

Passo 2: Implementações Concretas para Comunicação com Serviços Externos

Implementamos adaptadores para cada serviço externo de pagamento:

class StripePaymentService implements ExternalPaymentService {
  async processPayment(amount: number): Promise<string> {
    // Lógica para processar o pagamento via Stripe
    return `Pagamento de ${amount} processado com sucesso via Stripe.`;
  }
}

class PaypalPaymentService implements ExternalPaymentService {
  async processPayment(amount: number): Promise<string> {
    // Lógica para processar o pagamento via PayPal
    return `Pagamento de ${amount} processado com sucesso via PayPal.`;
  }
}

class BankTransferService implements ExternalPaymentService {
  async processPayment(amount: number): Promise<string> {
    // Lógica para processar o pagamento via Transferência Bancária
    return `Pagamento de ${amount} processado com sucesso via Transferência Bancária.`;
  }
}
Enter fullscreen mode Exit fullscreen mode

Passo 3: Criando a Fachada de Pagamento

Agora, criamos uma fachada que encapsula a complexidade de escolher e chamar o método de pagamento apropriado:

class PaymentIntegrationFacade {
  private paymentServices: {[key: string]: ExternalPaymentService} = {
    stripe: new StripePaymentService(),
    paypal: new PaypalPaymentService(),
    bankTransfer: new BankTransferService(),
  };

  async processPayment(method: string, amount: number): Promise<string> {
    const service = this.paymentServices[method];
    if (!service) {
      return 'Método de pagamento inválido.';
    }
    return service.processPayment(amount);
  }
}
Enter fullscreen mode Exit fullscreen mode

Passo 4: Utilizando a Nova Fachada

Agora, a fachada gerencia a complexidade de interagir com diferentes plataformas de pagamento:

const paymentIntegrationFacade = new PaymentIntegrationFacade();

// Exemplos de chamadas
async function executePayment() {
  console.log(await paymentIntegrationFacade.processPayment('stripe', 100)); // Stripe
  console.log(await paymentIntegrationFacade.processPayment('paypal', 200)); // PayPal
  console.log(await paymentIntegrationFacade.processPayment('bankTransfer', 300)); // Transferência Bancária
}

executePayment();
Enter fullscreen mode Exit fullscreen mode

Conclusão

Este exemplo demonstra o poder do Design Pattern Facade em proporcionar uma interface simplificada para operações complexas, como o processamento de pagamentos.

Espero que este guia inspire suas próximas implementações, elevando a eficiência e a clareza do seu código. Até mais, Devs! 🚀

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay