miladkazemi
4 سال پیش توسط miladkazemi مطرح شد
4 پاسخ

تشخیص درگاه بانکی بر اساس پیش شماره

سلام دوستان
من با استفاده از دیزاین پترن استراتژی دو تا کلاس درگاه بانکی ایجاد کردم که به صورت دستی بدون استفاده از 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 استفاده کنم که قواعد سالید رو نقض نکنم؟


ثبت پرسش جدید
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@sorena
نه اصلا این طور نیست. شما میتونید خودتون براش یک کلاس اختصاصی ایجاد کنید و اون کار خودش رو میکنه. و یا اینکه یک تابع.


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 4 سال پیش مطرح شد
1

سلام میتونید از پکیج زیر استفاده کنید. تقریبا بیشتر درگاه های بانکی رو ساپورت میکنه.

https://github.com/shetabit/payment

داکیومنت فارسی هم به صورت زیر هست

https://github.com/shetabit/payment/blob/master/README-FA.md

برای پیش شماره بانک ها هم سرچ بزنید توی نت همه ی پیش شماره ها هست.


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@sorena
سلام. شما میتونید یه لیست از پیش شماره ها تهیه کنید + نام کلاس بانکشون. مثل زیر :

{
   "0":{
      "ccNum":"6037",
      "bankName":"MelliGateway"
   },
   "1":{
      "ccNum":"6104",
      "bankName":"MellatGateway"
   }
}

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


miladkazemi
تخصص : مهندسی نرم افزار
@miladkazemi 4 سال پیش مطرح شد
0

ممنون دوستان
آخرین گزینه ای هم که خودم بهش رسیدم استفاده از روش ذخیره در دیتابیس بود...
ولی سوال اینجاست که از لحاظ قواعد سالید و دیزاین پترن مشکل نیست این قضیه؟ آنتی پترن نشده کارم؟


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@sorena
نه اصلا این طور نیست. شما میتونید خودتون براش یک کلاس اختصاصی ایجاد کنید و اون کار خودش رو میکنه. و یا اینکه یک تابع.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام