„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Dynamische Auswahl des Zahlungsprozessors in Laravel mithilfe des Factory-Musters

Dynamische Auswahl des Zahlungsprozessors in Laravel mithilfe des Factory-Musters

Veröffentlicht am 04.11.2024
Durchsuche:190

Dynamic Payment Processor Selection in Laravel  Using the Factory Pattern

In den vorherigen Beiträgen haben wir zwei verschiedene Methoden zur Abwicklung der Zahlungsabwicklung in Laravel untersucht:

  • hartcodierte Dienstbindungen
  • Kontextuelle Bindung.

Obwohl beide Methoden effektiv sind, haben sie ihre Grenzen, wenn es darum geht, Zahlungsabwickler dynamisch basierend auf Laufzeitbedingungen (z. B. Benutzereingaben, Konfigurationseinstellungen) auszuwählen.

In diesem dritten und letzten Teil werden wir uns einen flexibleren Ansatz ansehen: die Verwendung des Factory-Musters. Dieses Entwurfsmuster ermöglicht es uns, die geeignete Implementierung von PaymentProcessorInterface basierend auf dem Kontext auszuwählen (z. B. je nach Anfrage zwischen Stripe oder PayPal zu wählen).

Implementierung des Factory-Musters

Das Factory Pattern bietet eine skalierbare Lösung, um verschiedene Implementierungen zur Laufzeit dynamisch aufzulösen. So richten Sie es Schritt für Schritt ein.

Schritt 1: Erstellen Sie eine Factory-Schnittstelle

Zuerst definieren wir eine PaymentProcessorFactoryInterface, die beschreibt, wie verschiedene Zahlungsabwickler aufgelöst werden.

Diese Schnittstelle stellt sicher, dass jede von uns erstellte Factory über eine getProcessor-Methode verfügt, die für die Rückgabe des entsprechenden Zahlungsprozessors basierend auf dem bereitgestellten Argument (z. B. „stripe“ oder „paypal“) verantwortlich ist.

Schritt 2: Erstellen Sie die Factory-Implementierung

Als nächstes implementieren wir die Factory, die den entsprechenden Zahlungsprozessor basierend auf der Anbietereingabe auflöst.

Diese Fabrik wählt dynamisch den richtigen Zahlungsprozessor basierend auf den zur Laufzeit bereitgestellten Eingaben aus. In diesem Beispiel geben wir direkt neue Instanzen von StripePaymentProcessor und PayPalPaymentProcessor zurück. Bei Bedarf können diese Klassen zur besseren Verwaltung auch aus dem Service-Container von Laravel aufgelöst werden.

Schritt 3: Implementieren Sie Stripe- und PayPal-Prozessoren

Stellen Sie sicher, dass Sie sowohl über die Klassen StripePaymentProcessor als auch PayPalPaymentProcessor verfügen, die das PaymentProcessorInterface implementieren.

Beispiel: StripePaymentProcessor

Beispiel: PayPalPaymentProcessor

Implementieren Sie auf ähnliche Weise die PayPalPaymentProcessor-Klasse und folgen Sie dabei demselben Muster wie der StripePaymentProcessor.

Schritt 4: Binden Sie die Factory in den Service-Container

Um sicherzustellen, dass die Factory in Ihrer gesamten Laravel-Anwendung verfügbar ist, müssen Sie die PaymentProcessorFactory an den Service-Container von Laravel binden. Sie können dies im AppServiceProvider tun.

Fügen Sie in App\Providers\AppServiceProvider.php Folgendes in die Registermethode ein:

public function register()
{
    $this->app->singleton(\App\Contracts\PaymentProcessorFactoryInterface::class, \App\Services\PaymentProcessorFactory::class);
}

Diese Bindung weist Laravel an, die PaymentProcessorFactory zu verwenden, wann immer die PaymentProcessorFactoryInterface angefordert wird, um sicherzustellen, dass es in der gesamten Anwendung nur eine Instanz der Factory gibt.

Schritt 5: Verwendung der Factory in einem Controller

Nachdem die Fabrik eingerichtet ist, können Sie sie in Ihre Controller einschleusen, um den geeigneten Zahlungsprozessor basierend auf Laufzeitdaten, wie z. B. der Anforderungseingabe, dynamisch auszuwählen.

Beispiel: 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);
    }
}

In diesen Controller injizieren wir das PaymentProcessorFactoryInterface per Abhängigkeitsinjektion. Wenn eine Zahlung angefordert wird, ermitteln wir anhand der Anfrage den Zahlungsanbieter (z. B. Stripe oder PayPal), leiten ihn an die Fabrik weiter und lösen dynamisch den entsprechenden Zahlungsprozessor auf.

Schritt 6: Umgang mit verschiedenen Zahlungsanbietern

In diesem Setup kann der Controller nun dynamisch mit verschiedenen Zahlungsanbietern umgehen, indem er einfach den Anbieternamen in der Anfrage wechselt. Diese Methode ist besonders leistungsstark, wenn Sie mehrere Zahlungsgateways verwalten müssen, ohne die Logik zu duplizieren oder Ihren Code eng an bestimmte Implementierungen zu koppeln.

Abschluss

Die Verwendung des Factory-Musters in Laravel 11 bietet einen äußerst flexiblen Ansatz zur Auswahl verschiedener Zahlungsabwickler zur Laufzeit. Hier ist eine Zusammenfassung der von uns behandelten Schritte:

  • Factory-Schnittstelle und -Implementierung: Es wurde eine Factory erstellt, die den richtigen Zahlungsprozessor basierend auf einer Zeichenfolgeneingabe dynamisch auflöst.
  • Prozessorimplementierungen: Es wurde sichergestellt, dass sowohl die StripePaymentProcessor- als auch die PayPalPaymentProcessor-Klasse PaymentProcessorInterface implementieren.
  • Service-Container-Bindung: Bindet die Fabrik im Service-Container, um eine einfache Injektion während der gesamten Anwendung zu ermöglichen. Dynamische Auswahl in Controllern: Verwendet die Factory innerhalb eines Controllers, um den geeigneten Zahlungsprozessor basierend auf Laufzeitdaten dynamisch auszuwählen und zu verwenden.

Software-Designprinzipien und Designmuster

Wir haben dieses dreiteilige Tutorial mit einem einzelnen Zahlungsprozessor mit einer hartcodierten Auswahl begonnen, dann haben wir eine In-Code-Konfiguration („Kompilierungszeit“) mithilfe der Laravel Service Container Binding verwendet und dann haben wir in diesem Teil das Design weiter umgestaltet Prinzipien und Designmuster im Hinterkopf, die es uns ermöglichten, den Code umzugestalten und Folgendes zu erreichen:

  • Dynamische Flexibilität: Das Factory Pattern ermöglicht die Auswahl verschiedener Zahlungsabwickler zur Laufzeit, wodurch Ihre Anwendung flexibler und skalierbarer wird.
  • Loose Kopplung: Durch die Integration der Fabrik sind Ihre Controller lose an die Zahlungsabwickler gekoppelt, was es in Zukunft einfacher macht, Zahlungsgateways hinzuzufügen oder zu ersetzen.
  • Wartbarkeit: Dieser Ansatz bietet eine sauberere und besser wartbare Codebasis, insbesondere beim Umgang mit mehreren Zahlungsoptionen.

Mit diesem Setup verfügen wir nun über ein leistungsstarkes, flexibles System zur Zahlungsabwicklung in Laravel. Wenn wir zusätzliche Prozessoren unterstützen müssen, können wir die Fabrik problemlos erweitern, um die Logik zur Auswahl von Anbietern zu unterstützen und zu ändern und verschiedene Geschäftslogikszenarien zu bewältigen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/websilvercraft/dynamic-paid-processor-selection-in-laravel-11-using-the-factory-pattern-3pbd?1 Bei Verstößen wenden Sie sich bitte an Study_golang @163.com löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3