Dominando o Design Pattern Facade: Simplifique a Integração de Sistemas!
Arthur Freitas
Posted on February 25, 2024
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>;
}
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.`;
}
}
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);
}
}
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();
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! 🚀
Posted on February 25, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.