برنامه نویسی

پیاده سازی Contextual Binding در زمان کامپایل برای پردازش پرداخت در لاراول 11

Summarize this content to 400 words in Persian Lang
در پست قبلی (نحوه افزودن و پیاده‌سازی واسط‌های پردازش پرداخت در لاراول 11: صحافی با کد سخت)، ما اولین گام در راه‌اندازی پردازنده‌های پرداخت را با کدگذاری سخت اتصال بین PaymentProcessorInterface و یک پیاده‌سازی خاص، مانند StripePaymentProcessor، بررسی کردیم.

در حالی که این رویکرد برای برنامه‌های کوچک ساده و مؤثر است، برای سناریوهای پیچیده‌تر که ممکن است نیاز به مدیریت درگاه‌های پرداخت متعدد داشته باشید، فاقد انعطاف‌پذیری است، اما با استفاده از یک رابط، به ما اجازه داد تا کد را جدا کنیم تا بتوانیم آن را مطابق با اصل بسته باز کردن، برای تزریق عملکرد مناسب:

اتصال متنی در زمان کامپایل، با استفاده از مکانیزم کانتینر خدمات لاراول.
با استفاده از الگوی کارخانه نمونه سازی کلاس های مورد نیاز در زمان اجرا.

در این بخش دوم، ما به پیوند متنی می پردازیم، یک تکنیک پیشرفته تر در کانتینر سرویس لاراول که به شما امکان می دهد پیاده سازی های مختلف یک رابط را بر اساس زمینه خاص تزریق کنید. این زمانی مفید است که انتخاب یک پردازشگر پرداخت به وضعیت برنامه بستگی دارد، مانند اینکه کدام کنترل کننده درخواست را مدیریت می کند.

مرحله 1: درک متنی Binding

اتصال متنی در لاراول به کانتینر سرویس اجازه می‌دهد تا پیاده‌سازی‌های مختلف یک رابط را بسته به کلاس یا زمینه درخواست‌کننده آن تزریق کند. به‌جای تکیه بر یک پیاده‌سازی واحد و کد سخت، می‌توانیم از پیوند متنی برای حل و فصل پردازشگرهای پرداخت مختلف بر اساس کنترل‌کننده یا برخی عوامل زمینه‌ای دیگر استفاده کنیم.

مرحله 2: اتصال متنی در AppServiceProvider

بیایید با پیکربندی پیوندهای متنی در AppServiceProvider شروع کنیم. ما پردازشگرهای پرداخت مختلف را بر اساس کنترل کننده ای که آنها را درخواست می کند متصل می کنیم. برای مثال، StripePaymentController از StripePaymentProcessor و PayPalPaymentController از PayPalPaymentProcessor استفاده خواهد کرد.

در اینجا نحوه انجام این کار آمده است:

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

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا چه خبر است؟

$this->app->when(): این به لاراول می‌گوید زمانی که یک کلاس خاص (در این مورد، یک کنترل‌کننده) به آن نیاز دارد، پیاده‌سازی خاصی از یک رابط را متصل کند.
.needs(): این مشخص می کند که کلاس (StripePaymentController یا PayPalPaymentController) به یک نمونه از PaymentProcessorInterface نیاز دارد.
.give(): این تعیین می کند که کدام پیاده سازی بتن ارائه شود. به عنوان مثال، StripePaymentController StripePaymentProcessor را دریافت می کند و PayPalPaymentController PayPalPaymentProcessor را دریافت می کند. این اتصال به شما این امکان را می دهد که به صورت پویا پردازشگر پرداخت صحیح را بسته به اینکه کدام کنترل کننده درخواست را رسیدگی می کند، حل کنید.

مرحله 3: کنترل کننده های جداگانه برای هر روش پرداخت

با اتصال متنی، هر کنترل کننده اکنون می تواند پردازشگر پرداخت اختصاصی خود را به صورت خودکار تزریق کند. در اینجا نحوه تنظیم کنترلرهای خود آورده شده است:

مثال: 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…
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال: 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…
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در هر دو مثال، لاراول به طور خودکار پردازشگر پرداخت صحیح را بر اساس زمینه کنترلر تزریق می کند. این به لطف پیوند متنی تنظیم شده در AppServiceProvider است.

چرا از اتصال متنی استفاده کنیم؟

پیوند متنی به ویژه زمانی مفید است که می‌دانید از کدام پیاده‌سازی یک رابط بر اساس کلاس‌ها یا زمینه‌های خاص، مانند کنترل‌کننده‌ها استفاده کنید. این کمک می کند تا کد شما را تمیز و قابل مدیریت نگه دارید، به خصوص زمانی که با چندین درگاه پرداخت سروکار دارید، که هر کدام کنترل کننده خاص خود را دارند.

نتیجه گیری

در این پست، نحوه پیاده‌سازی پیوند متنی در لاراول 11 برای پردازش پرداخت را بررسی کرده‌ایم. در اینجا خلاصه ای سریع از مزایای این روش آورده شده است:

Cleaner Code: بدون نیاز به منطق دستی برای انتخاب بین پردازشگرهای پرداخت مختلف.
تزریق خودکار: لاراول به طور خودکار پردازنده صحیح را بر اساس زمینه (کنترل کننده) تزریق می کند.
انعطاف پذیری: شما به راحتی می توانید این رویکرد را به بخش های دیگر برنامه خود، مانند سرویس های مختلف یا زمینه های دیگر، گسترش دهید. زمان استفاده از اتصال متنی در مقابل الگوی کارخانه
Contextual Binding: زمانی ایده آل است که پردازنده را بتوان بر اساس کلاس های خاص (مانند کنترلرهای مختلف) یا زمینه های شناخته شده انتخاب کرد. این کد را که در آن زمینه در زمان کامپایل شناخته شده است، ساده می کند.
الگوی کارخانه: اگر می‌خواهید به صورت پویا یک پردازشگر پرداخت را بر اساس داده‌های زمان اجرا (به عنوان مثال، ورودی کاربر، درخواست API) انتخاب کنید، از الگوی کارخانه استفاده کنید. این رویکرد انعطاف‌پذیری بیشتری را برای انتخاب پردازشگر پرداخت، در زمان اجرا، بر اساس داده‌هایی که ممکن است تا زمانی که درخواست پردازش نشود، شناخته نشده است، ارائه می‌دهد.

در پست بعدی، الگوی کارخانه را بررسی خواهیم کرد، که امکان انتخاب پویا پردازنده‌های پرداخت را در زمان اجرا فراهم می‌کند و انعطاف‌پذیری بیشتری را برای برنامه‌های پیچیده فراهم می‌کند.

با بخش بعدی همراه باشید، جایی که نحوه استفاده از کارخانه ها برای پردازش پرداخت در لاراول 11 را پوشش خواهیم داد!

در پست قبلی (نحوه افزودن و پیاده‌سازی واسط‌های پردازش پرداخت در لاراول 11: صحافی با کد سخت)، ما اولین گام در راه‌اندازی پردازنده‌های پرداخت را با کدگذاری سخت اتصال بین PaymentProcessorInterface و یک پیاده‌سازی خاص، مانند StripePaymentProcessor، بررسی کردیم.

در حالی که این رویکرد برای برنامه‌های کوچک ساده و مؤثر است، برای سناریوهای پیچیده‌تر که ممکن است نیاز به مدیریت درگاه‌های پرداخت متعدد داشته باشید، فاقد انعطاف‌پذیری است، اما با استفاده از یک رابط، به ما اجازه داد تا کد را جدا کنیم تا بتوانیم آن را مطابق با اصل بسته باز کردن، برای تزریق عملکرد مناسب:

  • اتصال متنی در زمان کامپایل، با استفاده از مکانیزم کانتینر خدمات لاراول.
  • با استفاده از الگوی کارخانه نمونه سازی کلاس های مورد نیاز در زمان اجرا.

در این بخش دوم، ما به پیوند متنی می پردازیم، یک تکنیک پیشرفته تر در کانتینر سرویس لاراول که به شما امکان می دهد پیاده سازی های مختلف یک رابط را بر اساس زمینه خاص تزریق کنید. این زمانی مفید است که انتخاب یک پردازشگر پرداخت به وضعیت برنامه بستگی دارد، مانند اینکه کدام کنترل کننده درخواست را مدیریت می کند.

مرحله 1: درک متنی Binding

اتصال متنی در لاراول به کانتینر سرویس اجازه می‌دهد تا پیاده‌سازی‌های مختلف یک رابط را بسته به کلاس یا زمینه درخواست‌کننده آن تزریق کند. به‌جای تکیه بر یک پیاده‌سازی واحد و کد سخت، می‌توانیم از پیوند متنی برای حل و فصل پردازشگرهای پرداخت مختلف بر اساس کنترل‌کننده یا برخی عوامل زمینه‌ای دیگر استفاده کنیم.

مرحله 2: اتصال متنی در AppServiceProvider

بیایید با پیکربندی پیوندهای متنی در AppServiceProvider شروع کنیم. ما پردازشگرهای پرداخت مختلف را بر اساس کنترل کننده ای که آنها را درخواست می کند متصل می کنیم. برای مثال، StripePaymentController از StripePaymentProcessor و PayPalPaymentController از PayPalPaymentProcessor استفاده خواهد کرد.

در اینجا نحوه انجام این کار آمده است:

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);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا چه خبر است؟

  • $this->app->when(): این به لاراول می‌گوید زمانی که یک کلاس خاص (در این مورد، یک کنترل‌کننده) به آن نیاز دارد، پیاده‌سازی خاصی از یک رابط را متصل کند.
  • .needs(): این مشخص می کند که کلاس (StripePaymentController یا PayPalPaymentController) به یک نمونه از PaymentProcessorInterface نیاز دارد.
  • .give(): این تعیین می کند که کدام پیاده سازی بتن ارائه شود. به عنوان مثال، StripePaymentController StripePaymentProcessor را دریافت می کند و PayPalPaymentController PayPalPaymentProcessor را دریافت می کند. این اتصال به شما این امکان را می دهد که به صورت پویا پردازشگر پرداخت صحیح را بسته به اینکه کدام کنترل کننده درخواست را رسیدگی می کند، حل کنید.

مرحله 3: کنترل کننده های جداگانه برای هر روش پرداخت

با اتصال متنی، هر کنترل کننده اکنون می تواند پردازشگر پرداخت اختصاصی خود را به صورت خودکار تزریق کند. در اینجا نحوه تنظیم کنترلرهای خود آورده شده است:

مثال: 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...
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال: 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...
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در هر دو مثال، لاراول به طور خودکار پردازشگر پرداخت صحیح را بر اساس زمینه کنترلر تزریق می کند. این به لطف پیوند متنی تنظیم شده در AppServiceProvider است.

چرا از اتصال متنی استفاده کنیم؟

پیوند متنی به ویژه زمانی مفید است که می‌دانید از کدام پیاده‌سازی یک رابط بر اساس کلاس‌ها یا زمینه‌های خاص، مانند کنترل‌کننده‌ها استفاده کنید. این کمک می کند تا کد شما را تمیز و قابل مدیریت نگه دارید، به خصوص زمانی که با چندین درگاه پرداخت سروکار دارید، که هر کدام کنترل کننده خاص خود را دارند.

نتیجه گیری

در این پست، نحوه پیاده‌سازی پیوند متنی در لاراول 11 برای پردازش پرداخت را بررسی کرده‌ایم. در اینجا خلاصه ای سریع از مزایای این روش آورده شده است:

  • Cleaner Code: بدون نیاز به منطق دستی برای انتخاب بین پردازشگرهای پرداخت مختلف.
  • تزریق خودکار: لاراول به طور خودکار پردازنده صحیح را بر اساس زمینه (کنترل کننده) تزریق می کند.
  • انعطاف پذیری: شما به راحتی می توانید این رویکرد را به بخش های دیگر برنامه خود، مانند سرویس های مختلف یا زمینه های دیگر، گسترش دهید. زمان استفاده از اتصال متنی در مقابل الگوی کارخانه
  • Contextual Binding: زمانی ایده آل است که پردازنده را بتوان بر اساس کلاس های خاص (مانند کنترلرهای مختلف) یا زمینه های شناخته شده انتخاب کرد. این کد را که در آن زمینه در زمان کامپایل شناخته شده است، ساده می کند.
  • الگوی کارخانه: اگر می‌خواهید به صورت پویا یک پردازشگر پرداخت را بر اساس داده‌های زمان اجرا (به عنوان مثال، ورودی کاربر، درخواست API) انتخاب کنید، از الگوی کارخانه استفاده کنید. این رویکرد انعطاف‌پذیری بیشتری را برای انتخاب پردازشگر پرداخت، در زمان اجرا، بر اساس داده‌هایی که ممکن است تا زمانی که درخواست پردازش نشود، شناخته نشده است، ارائه می‌دهد.

در پست بعدی، الگوی کارخانه را بررسی خواهیم کرد، که امکان انتخاب پویا پردازنده‌های پرداخت را در زمان اجرا فراهم می‌کند و انعطاف‌پذیری بیشتری را برای برنامه‌های پیچیده فراهم می‌کند.

با بخش بعدی همراه باشید، جایی که نحوه استفاده از کارخانه ها برای پردازش پرداخت در لاراول 11 را پوشش خواهیم داد!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا