سلام دوستان
من با استفاده از دیزاین پترن استراتژی دو تا کلاس درگاه بانکی ایجاد کردم که به صورت دستی بدون استفاده از if و else بتونه متدها رو صدا بزنه...
مسئله اونجایی هست که من میخوام به صورت خودکار براساس پیش شماره کارت تشخیص بده که از کدوم کلاس gateway استفاده کنه...
مثلا الان اینکارو کردم:
//Get First split (4# Length) Credit Card <=> (6037) XXXX XXXX XXXX
$ccNumber = str_split($payItem->ccnumber,4)[0];
if ($ccNumber === '6104')
{
$payment->setGateway(new MellatGateway());
}
elseif ($ccNumber === '6037')
{
$payment->setGateway(new MelliGateway());
}
به شدت هم ضروری هست اگر لطف کنید که راهی به نظرتون هست که نخوام از if , else استفاده کنم که قواعد سالید رو نقض نکنم؟
@sorena
نه اصلا این طور نیست. شما میتونید خودتون براش یک کلاس اختصاصی ایجاد کنید و اون کار خودش رو میکنه. و یا اینکه یک تابع.
سلام میتونید از پکیج زیر استفاده کنید. تقریبا بیشتر درگاه های بانکی رو ساپورت میکنه.
https://github.com/shetabit/payment
داکیومنت فارسی هم به صورت زیر هست
https://github.com/shetabit/payment/blob/master/README-FA.md
برای پیش شماره بانک ها هم سرچ بزنید توی نت همه ی پیش شماره ها هست.
@sorena
سلام. شما میتونید یه لیست از پیش شماره ها تهیه کنید + نام کلاس بانکشون. مثل زیر :
{
"0":{
"ccNum":"6037",
"bankName":"MelliGateway"
},
"1":{
"ccNum":"6104",
"bankName":"MellatGateway"
}
}
بعد اون ها رو داخل یک آرایه یا فایل یا دیتابیس ذخیره کنید، بعد میتونید که با استفاده از سرچ کردن درون اوها کار رو انجام بدید، دیگه نیازی به ifelse های طولانی نیست.
ممنون دوستان
آخرین گزینه ای هم که خودم بهش رسیدم استفاده از روش ذخیره در دیتابیس بود...
ولی سوال اینجاست که از لحاظ قواعد سالید و دیزاین پترن مشکل نیست این قضیه؟ آنتی پترن نشده کارم؟
@sorena
نه اصلا این طور نیست. شما میتونید خودتون براش یک کلاس اختصاصی ایجاد کنید و اون کار خودش رو میکنه. و یا اینکه یک تابع.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟