Nos posts anteriores, exploramos dois métodos diferentes para lidar com o processamento de pagamentos no Laravel:
Embora ambos os métodos sejam eficazes, eles têm suas limitações quando se trata de selecionar processadores de pagamento dinamicamente com base nas condições de tempo de execução (por exemplo, entrada do usuário, definições de configuração).
Nesta terceira e última parte, veremos uma abordagem mais flexível: usando o Factory Pattern. Este padrão de design nos permite escolher a implementação apropriada de PaymentProcessorInterface com base no contexto (por exemplo, selecionando entre Stripe ou PayPal dependendo da solicitação).
O Factory Pattern fornece uma solução escalável para resolver dinamicamente diferentes implementações em tempo de execução. Veja como configurá-lo passo a passo.
Primeiro, vamos definir um PaymentProcessorFactoryInterface que descreve como resolver diferentes processadores de pagamento.
Essa interface garante que qualquer fábrica que criarmos terá um método getProcessor, responsável por retornar o processador de pagamento apropriado com base no argumento fornecido (por exemplo, 'stripe' ou 'paypal').
Etapa 2: Criar a Implementação de Fábrica
Em seguida, implementaremos a fábrica que resolve o processador de pagamento apropriado com base na entrada do provedor.
Esta fábrica seleciona dinamicamente o processador de pagamento correto com base na entrada fornecida em tempo de execução. Neste exemplo, retornamos diretamente novas instâncias de StripePaymentProcessor e PayPalPaymentProcessor. Se necessário, essas classes também podem ser resolvidas no contêiner de serviço do Laravel para melhor gerenciamento.
Etapa 3: implementar processadores Stripe e PayPal
Certifique-se de ter as classes StripePaymentProcessor e PayPalPaymentProcessor que implementam o PaymentProcessorInterface.
Exemplo: StripePaymentProcessor
Exemplo: PayPalPaymentProcessor
Da mesma forma, implemente a classe PayPalPaymentProcessor, seguindo o mesmo padrão do StripePaymentProcessor.
Etapa 4: vincular a fábrica ao contêiner de serviço
Para garantir que a fábrica esteja disponível em todo o seu aplicativo Laravel, você precisa vincular o PaymentProcessorFactory ao contêiner de serviço do Laravel. Você pode fazer isso no AppServiceProvider.
Em App\Providers\AppServiceProvider.php, adicione o seguinte dentro do método de registro:
public function register() { $this->app->singleton(\App\Contracts\PaymentProcessorFactoryInterface::class, \App\Services\PaymentProcessorFactory::class); }Essa ligação diz ao Laravel para usar PaymentProcessorFactory sempre que PaymentProcessorFactoryInterface for solicitado, garantindo que haja apenas uma instância da fábrica em toda a aplicação.
Etapa 5: usando o Factory em um controlador
Agora que a fábrica está configurada, você pode injetá-la em seus controladores para selecionar dinamicamente o processador de pagamento apropriado com base nos dados de tempo de execução, como a entrada da solicitação.
Exemplo: PaymentController
paymentProcessorFactory = $paymentProcessorFactory; } public function makePayment(Request $request) { $provider = $request->input('provider'); // E.g., 'stripe' or 'paypal' $amount = $request->input('amount'); $currency = $request->input('currency'); $paymentDetails = $request->input('details'); // Get the appropriate payment processor based on the provider $paymentProcessor = $this->paymentProcessorFactory->getProcessor($provider); // Use the selected payment processor to create a payment $response = $paymentProcessor->createPayment($amount, $currency, $paymentDetails); return response()->json($response); } }Neste controlador, injetamos PaymentProcessorFactoryInterface por meio de injeção de dependência. Quando um pagamento é solicitado, determinamos o provedor de pagamento (por exemplo, Stripe ou PayPal) a partir da solicitação, passamos para a fábrica e resolvemos dinamicamente o processador de pagamento apropriado.
Etapa 6: Lidar com diferentes provedores de pagamento
Nesta configuração, o controlador agora pode lidar dinamicamente com diferentes provedores de pagamento simplesmente trocando o nome do provedor na solicitação. Este método é particularmente poderoso quando você precisa lidar com vários gateways de pagamento sem duplicar a lógica ou acoplar firmemente seu código a implementações específicas.
Conclusão
Usar o Factory Pattern no Laravel 11 oferece uma abordagem altamente flexível para selecionar diferentes processadores de pagamento em tempo de execução. Aqui está um resumo das etapas que abordamos:
Começamos este tutorial de 3 partes usando um único processador de pagamento, com uma seleção codificada, depois estávamos usando uma configuração in code ("tempo de compilação") usando Laravel Service Container Binding, então nesta parte continuamos refatorando com design princípios e padrões de design em mente, o que nos permitiu refatorar o código, alcançando:
Com esta configuração, agora temos um sistema poderoso e flexível para lidar com pagamentos no Laravel. Se precisarmos oferecer suporte a processadores adicionais, podemos facilmente estender a fábrica para oferecer suporte e modificar a lógica de seleção de provedores e lidar com diferentes cenários de lógica de negócios.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3