前回の投稿では、Laravel で支払い処理を処理するための 2 つの異なる方法を検討しました:
どちらの方法も効果的ではありますが、実行時の条件 (ユーザー入力、構成設定など) に基づいて支払い処理業者を動的に選択する場合には制限があります。
最後の 3 番目のパートでは、より柔軟なアプローチ、つまりファクトリー パターンの使用について見ていきます。この設計パターンにより、コンテキストに基づいて PaymentProcessorInterface の適切な実装を選択できます (リクエストに応じて Stripe か PayPal のどちらかを選択するなど)。
ファクトリ パターンは、実行時にさまざまな実装を動的に解決するスケーラブルなソリューションを提供します。設定方法を段階的に説明します。
まず、さまざまな支払いプロセッサを解決する方法の概要を説明する PaymentProcessorFactoryInterface を定義しましょう。
このインターフェイスにより、作成するファクトリには getProcessor メソッドが確実に含まれ、指定された引数 (例: 'ストライプ' または 'ペイパル') に基づいて適切な支払いプロセッサを返す役割を果たします。
ステップ 2: ファクトリ実装を作成する
次に、プロバイダーの入力に基づいて適切な支払いプロセッサを解決するファクトリを実装します。
このファクトリは、実行時に提供された入力に基づいて正しい支払いプロセッサを動的に選択します。この例では、StripePaymentProcessor と PayPalPaymentProcessor の新しいインスタンスを直接返します。必要に応じて、これらのクラスを Laravel のサービス コンテナから解決して管理を改善することもできます。
ステップ 3: Stripe および PayPal プロセッサを実装する
PaymentProcessorInterface を実装する StripePaymentProcessor クラスと PayPalPaymentProcessor クラスの両方があることを確認してください。
例: StripePaymentProcessor
例: PayPalPaymentProcessor
同様に、StripePaymentProcessor と同じパターンに従って PayPalPaymentProcessor クラスを実装します。
ステップ 4: サービス コンテナでファクトリをバインドする
Laravelアプリケーション全体でファクトリーを確実に利用できるようにするには、PaymentProcessorFactoryをLaravelのサービスコンテナにバインドする必要があります。これは AppServiceProvider.
で行うことができます。App\Providers\AppServiceProvider.php の register メソッド内に以下を追加します:
public function register() { $this->app->singleton(\App\Contracts\PaymentProcessorFactoryInterface::class, \App\Services\PaymentProcessorFactory::class); }このバインディングは、PaymentProcessorFactoryInterface が要求されるたびに PaymentProcessorFactory を使用するように Laravel に指示し、アプリケーション全体でファクトリのインスタンスが 1 つだけ存在するようにします。
ステップ 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: さまざまな決済プロバイダーの処理
この設定では、コントローラーはリクエスト内のプロバイダー名を切り替えるだけで、さまざまな支払いプロバイダーを動的に処理できるようになりました。この方法は、ロジックを複製したり、コードを特定の実装に緊密に結合したりせずに、複数の支払いゲートウェイを処理する必要がある場合に特に強力です。
結論
Laravel 11 で Factory Pattern を使用すると、実行時にさまざまな支払いプロセッサを選択するための非常に柔軟なアプローチが提供されます。ここで説明した手順の概要は次のとおりです:
この 3 部構成のチュートリアルは、ハードコードされた選択を使用して単一の決済プロセッサを使用して開始し、次に Laravel サービス コンテナ バインディングを使用してコード内 (「コンパイル時」) 構成を使用し、その後、この部分では設計のリファクタリングを続けました。原則と設計パターンを念頭に置いて、コードをリファクタリングして、次のことを実現できました。
このセットアップにより、Laravel で支払いを処理するための強力で柔軟なシステムが完成しました。追加のプロセッサをサポートする必要がある場合は、プロバイダーを選択するためのロジックをサポートおよび変更して、さまざまなビジネス ロジック シナリオを処理できるようにファクトリを簡単に拡張できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3