Em nossa postagem anterior (Como adicionar e implementar interfaces de processamento de pagamento no Laravel 11: vinculação codificada), exploramos a primeira etapa na configuração de processadores de pagamento codificando a vinculação entre PaymentProcessorInterface e uma implementação específica, como StripePaymentProcessor.
Embora essa abordagem seja simples e eficaz para pequenas aplicações, ela carece de flexibilidade para cenários mais complexos onde você pode precisar lidar com vários gateways de pagamento, mas usando uma interface, nos permitiu desacoplar o código para que possamos estendê-lo ainda mais, de acordo com o princípio de abrir e fechar, para injetar a funcionalidade adequada:
Nesta segunda parte, mergulharemos na vinculação contextual, uma técnica mais avançada no contêiner de serviço do Laravel que permite injetar diferentes implementações de uma interface com base no contexto específico. Isso é útil quando a escolha de um processador de pagamento depende do estado do aplicativo, como qual controlador está tratando a solicitação.
A ligação contextual no Laravel permite que o contêiner de serviço injete diferentes implementações de uma interface dependendo da classe ou contexto que a solicita. Em vez de depender de uma implementação única e codificada, podemos usar vinculação contextual para resolver diferentes processadores de pagamento com base no controlador ou em algum outro fator contextual.
Vamos começar configurando ligações contextuais no AppServiceProvider. Vincularemos diferentes processadores de pagamento com base no controlador que os solicita. Por exemplo, o StripePaymentController usará StripePaymentProcessor e o PayPalPaymentController usará PayPalPaymentProcessor.
Veja como você pode fazer isso:
use App\Contracts\PaymentProcessorInterface; use App\Services\StripePaymentProcessor; use App\Services\PayPalPaymentProcessor; public function register() { $this->app->when(StripePaymentController::class) ->needs(PaymentProcessorInterface::class) ->give(StripePaymentProcessor::class); $this->app->when(PayPalPaymentController::class) ->needs(PaymentProcessorInterface::class) ->give(PayPalPaymentProcessor::class); }
O que está acontecendo aqui?
Com a vinculação contextual implementada, cada controlador agora pode ter seu processador de pagamento dedicado injetado automaticamente. Veja como você pode configurar seus controladores:
Exemplo: StripePaymentController
use App\Contracts\PaymentProcessorInterface; class StripePaymentController extends Controller { protected $paymentProcessor; public function __construct(PaymentProcessorInterface $paymentProcessor) { $this->paymentProcessor = $paymentProcessor; } // Methods to handle Stripe-specific payments... }
Exemplo: PayPalPaymentController
use App\Contracts\PaymentProcessorInterface; class PayPalPaymentController extends Controller { protected $paymentProcessor; public function __construct(PaymentProcessorInterface $paymentProcessor) { $this->paymentProcessor = $paymentProcessor; } // Methods to handle PayPal-specific payments... }
Em ambos os exemplos, o Laravel injeta automaticamente o processador de pagamento correto com base no contexto do controlador. Isso se deve à vinculação contextual configurada no AppServiceProvider.
A vinculação contextual é particularmente útil quando você sabe qual implementação de uma interface usar com base em classes ou contextos específicos, como controladores. Isso ajuda a manter seu código limpo e gerenciável, especialmente ao lidar com vários gateways de pagamento, cada um com seu próprio controlador.
Nesta postagem, exploramos como implementar vinculação contextual no Laravel 11 para processamento de pagamentos. Aqui está uma rápida recapitulação dos benefícios dessa abordagem:
No próximo post exploraremos o Factory Pattern, que permite a seleção dinâmica de processadores de pagamento em tempo de execução, proporcionando ainda mais flexibilidade para aplicações complexas.
Fique ligado na próxima parte, onde abordaremos como usar fábricas para processamento de pagamentos no Laravel 11!
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