زمانی که از چند درگاه پرداخت انلاین استفاده میکنیم و کاربر موقع پرداخت یک نوع رو انتخاب کرده باشد چطور باید این کلاس استراتژی رو تغییر بدیم که کدمون تمیز باشد
سلام مهدی عزیز
در ابتدا، شما باید یک رابط (Interface) برای کلاس استراتژی تعریف کنید. این رابط باید تمامی عملیات مربوط به پرداخت رو شامل بشه، مانند pay() و سایر متدهای مرتبط.
سپس، برای هر یک از درگاههای پرداخت موجود، یک کلاس استراتژی ایجاد بکنید که از رابط PaymentStrategy ارثبری کنه و متدهای اون رو پیادهسازی کنه.
classPayPalStrategyimplementsPaymentStrategy{
publicfunctionpay($amount) {
// کد مربوط به پرداخت با استفاده از درگاه PayPal
}
}
classCreditCardStrategyimplementsPaymentStrategy{
publicfunctionpay($amount) {
// کد مربوط به پرداخت با استفاده از درگاه کارت اعتباری
}
}
حالا در کد اصلی خودتون، شما باید یک متغیر از نوع PaymentStrategy ایجاد بکنید و این متغیر رو با یکی از کلاسهای استراتژی مقداردهی اولیه کنید. سپس، با استفاده از این متغیر، میتونید عملیات پرداخت رو فراخونی کنید.
$paymentMethod = new PayPalStrategy(); // یا CreditCardStrategy$paymentMethod->pay($amount);
حالا، اگر بخواید از درگاه پرداخت دیگه ای استفاده کنید، فقط کافیه که متغیر $paymentMethod رو با یک نمونه از کلاس استراتژی مورد نظر تغییر بدید، بدون اینکه نیازی به تغییر در کد پرداخت وجود داشته باشه.
$paymentMethod = new CreditCardStrategy(); // تغییر درگاه پرداخت به کارت اعتباری$paymentMethod->pay($amount);
با این روش، کد شما تمیزتر و قابل توسعهتر خواهد بود و میتونید به راحتی درگاههای پرداخت جدید رو به سیستم خودتون اضافه کنید بدون ایجاد تغییرات زیاد در کد اصلی.