«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Динамический выбор платежного процессора в Laravel с использованием шаблона Factory

Динамический выбор платежного процессора в Laravel с использованием шаблона Factory

Опубликовано 4 ноября 2024 г.
Просматривать:156

Dynamic Payment Processor Selection in Laravel  Using the Factory Pattern

В предыдущих публикациях мы рассмотрели два разных метода обработки платежей в Laravel:

  • жестко закодированные привязки служб
  • контекстная привязка.

Хотя оба метода эффективны, они имеют свои ограничения, когда речь идет о динамическом выборе платежных систем на основе условий времени выполнения (например, ввод пользователя, настройки конфигурации).

В этой третьей и последней части мы рассмотрим более гибкий подход: использование шаблона Factory. Этот шаблон проектирования позволяет нам выбирать подходящую реализацию PaymentProcessorInterface в зависимости от контекста (например, выбор между Stripe или PayPal в зависимости от запроса).

Реализация шаблона «Фабрика»

Шаблон Factory предоставляет масштабируемое решение для динамического разрешения различных реализаций во время выполнения. Вот как это настроить шаг за шагом.

Шаг 1. Создайте заводской интерфейс

Во-первых, давайте определим интерфейс 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 предлагает очень гибкий подход к выбору различных платежных процессоров во время выполнения. Вот краткое описание шагов, которые мы рассмотрели:

  • Интерфейс и реализация фабрики: создана фабрика, которая динамически определяет правильный платежный процессор на основе введенной строки.
  • Реализации процессора: гарантировано, что классы StripePaymentProcessor и PayPalPaymentProcessor реализуют PaymentProcessorInterface.
  • Привязка сервисного контейнера: привязка фабрики к сервисному контейнеру для облегчения внедрения во все приложения. Динамический выбор в контроллерах: используется фабрика внутри контроллера для динамического выбора и использования соответствующего платежного процессора на основе данных времени выполнения.

Принципы проектирования программного обеспечения и шаблоны проектирования

Мы начали это руководство из трех частей с использованием одного платежного процессора с жестко запрограммированным выбором, затем мы использовали конфигурацию в коде («время компиляции») с помощью привязки сервисного контейнера Laravel, а затем в этой части мы продолжили рефакторинг с дизайном принципы и шаблоны проектирования, что позволило нам провести рефакторинг кода, добившись:

  • Динамическая гибкость: шаблон Factory позволяет выбирать различные платежные системы во время выполнения, что делает ваше приложение более гибким и масштабируемым.
  • Слабая связь: благодаря внедрению фабрики ваши контроллеры будут слабо связаны с платежными процессорами, что упрощает добавление или замену платежных шлюзов в будущем.
  • Удобство сопровождения: этот подход обеспечивает более чистую и удобную в обслуживании кодовую базу, особенно при работе с несколькими вариантами оплаты.

Благодаря этой настройке у нас теперь есть мощная и гибкая система обработки платежей в Laravel. Если нам потребуется поддержка дополнительных процессоров, мы можем легко расширить фабрику для поддержки и изменения логики выбора поставщиков и обработки различных сценариев бизнес-логики.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/websilvercraft/dynamic-pay-processor-selection-in-laravel-11-using-the-factory-pattern-3pbd?1 Если есть какие-либо нарушения, свяжитесь с Study_golang. @163.com удалить
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3