В предыдущих публикациях мы рассмотрели два разных метода обработки платежей в Laravel:
Хотя оба метода эффективны, они имеют свои ограничения, когда речь идет о динамическом выборе платежных систем на основе условий времени выполнения (например, ввод пользователя, настройки конфигурации).
В этой третьей и последней части мы рассмотрим более гибкий подход: использование шаблона Factory. Этот шаблон проектирования позволяет нам выбирать подходящую реализацию PaymentProcessorInterface в зависимости от контекста (например, выбор между Stripe или PayPal в зависимости от запроса).
Шаблон Factory предоставляет масштабируемое решение для динамического разрешения различных реализаций во время выполнения. Вот как это настроить шаг за шагом.
Во-первых, давайте определим интерфейс PaymentProcessorFactoryInterface, который описывает, как разрешать различные платежные системы.
Этот интерфейс гарантирует, что любая создаваемая нами фабрика будет иметь метод getProcessor, отвечающий за возврат соответствующего платежного процессора на основе предоставленного аргумента (например, «stripe» или «paypal»).
Шаг 2. Создайте фабричную реализацию
Далее мы реализуем фабрику, которая определяет соответствующий платежный процессор на основе входных данных провайдера.
Эта фабрика динамически выбирает правильный платежный процессор на основе входных данных, предоставленных во время выполнения. В этом примере мы напрямую возвращаем новые экземпляры StripePaymentProcessor и PayPalPaymentProcessor. При необходимости эти классы также можно разрешить из сервисного контейнера Laravel для лучшего управления.
Шаг 3. Внедрение процессоров Stripe и PayPal
Убедитесь, что у вас есть классы StripePaymentProcessor и PayPalPaymentProcessor, реализующие интерфейс PaymentProcessorInterface.
Пример: StripePaymentProcessor
Пример: PayPalPaymentProcessor
Аналогично реализуйте класс PayPalPaymentProcessor по тому же шаблону, что и StripePaymentProcessor.
Шаг 4. Привяжите фабрику к сервисному контейнеру
Чтобы обеспечить доступность фабрики во всем приложении Laravel, вам необходимо привязать PaymentProcessorFactory к сервисному контейнеру Laravel. Вы можете сделать это в AppServiceProvider.
В App\Providers\AppServiceProvider.php добавьте следующее внутри метода регистрации:
public function register() { $this->app->singleton(\App\Contracts\PaymentProcessorFactoryInterface::class, \App\Services\PaymentProcessorFactory::class); }Эта привязка сообщает Laravel использовать PaymentProcessorFactory всякий раз, когда запрашивается PaymentProcessorFactoryInterface, гарантируя, что во всем приложении существует только один экземпляр фабрики.
Шаг 5. Использование фабрики в контроллере
Теперь, когда фабрика настроена, вы можете внедрить ее в свои контроллеры для динамического выбора подходящего платежного процессора на основе данных времени выполнения, таких как входные данные запроса.
Пример: 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); } }В этом контроллере мы внедряем интерфейс PaymentProcessorFactoryInterface посредством внедрения зависимостей. Когда запрашивается платеж, мы определяем поставщика платежей (например, Stripe или PayPal) на основе запроса, передаем его на фабрику и динамически определяем соответствующую платежную систему.
Шаг 6. Работа с разными поставщиками платежей
В этой настройке контроллер теперь может динамически обрабатывать различных поставщиков платежей, просто переключая имя поставщика в запросе. Этот метод особенно эффективен, когда вам нужно обрабатывать несколько платежных шлюзов без дублирования логики или тесной привязки вашего кода к конкретным реализациям.
Заключение
Использование шаблона Factory в Laravel 11 предлагает очень гибкий подход к выбору различных платежных процессоров во время выполнения. Вот краткое описание шагов, которые мы рассмотрели:
Мы начали это руководство из трех частей с использованием одного платежного процессора с жестко запрограммированным выбором, затем мы использовали конфигурацию в коде («время компиляции») с помощью привязки сервисного контейнера Laravel, а затем в этой части мы продолжили рефакторинг с дизайном принципы и шаблоны проектирования, что позволило нам провести рефакторинг кода, добившись:
Благодаря этой настройке у нас теперь есть мощная и гибкая система обработки платежей в Laravel. Если нам потребуется поддержка дополнительных процессоров, мы можем легко расширить фабрику для поддержки и изменения логики выбора поставщиков и обработки различных сценариев бизнес-логики.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3