ساخت آبجکت از interface در پارامتر ورودی متد construct

پرسیده شده
فعالیت 1090 روز پیش
دیده شده 365 بار
0

باسلام و عرض خسته نباشید

لطفا توضیح میدید که چرا در پارامتر ورودی __construct یک آبجکت از interface ایجاد کردیم؟

    public function __construct(DatabaseConnectionInterface $connection)
    {
        $this->connection = $connection->getConnection();
    }
فایل پیوست

محمد گازری
محمد گازری

20 اردیبهشت 00

1
حذف شده

سلام 

 

همونطور که بقیه دوستان هم گفتن این مورد برای جداسازی هرچه بیشتر ماژول‌های مختلف و کم کردن وابستگی به هم دیگه هستش،‌ این در واقع اصل پنجم SOLID هستش به نام Dependency Inversion که ما داخل کلاسمون به جای اینکه مستقیما از کلاسی که پیاده‌سازی شده و میشه از اون آبجکت ساخت، استفاده کنیم، میایم و از اینترفیس اون که در واقع میشه یک قرارداد استفاده میکنیم. مزیتی که به ما میده این هستش که شاید شما در آینده نیاز باشه که به جای استفاده از مثلا Mysql با این شکل پیاده‌سازی بخواید از Postgres یا Mongo و یا هر دیتابیس دیگه استفاده کنید، در این حالت اون کلاس جدید شما قرار داد DatabaseConnection رو پیاده‌سازی میکنه و شما در داخل برنامه‌تون میاید و کلاس جدید رو بهش پاس میدید، در این حالت کلاسی که داره از اون DatabaseConnection استفاده میکنید دست نخورده باقی میمونه و نیازی نیست شما هیچ تغییر دیگه‌ای در اون انجام بدید.

مثال دنیای واقعی اون میتونه ماشین‌های دوگانه‌سوز باشن که شما برای اینکه بخواین به ماشین دستور بدید که الان از بنزین استفاده نکن و مثلا از گاز استفاده کن با یک دکمه این کار رو انجام میدین به جای اینکه بخواید برید و موتور رو باز کنید و تغییراتی داخل موتور بدید.

فایل پیوست

مهرداد سامی

توسط

مهرداد سامی

22 اردیبهشت 00

0
حذف شده

سلام , 

 

همونطور که می دونید interface ها می تونن متد های یک کلاس رو به طور دقیق مشخص کنند, مثل اسم متد , ورودی ها یا همون آرگومان ها , نوع داده خروجی متد و ..

 

در کد بالا درواقع داریم میگیم که شی دریافتی باید با interface نوشته شده مچ شده باشه یعنی متد های تعریف شده در interface , باید در شی  ورودی هم باید وجود داشته باشه.

 

در اصطلاح می گیم : ورودی باید از نوع همون interface یا کلاس باشه.

 

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

 

 

فایل پیوست

Faraz salehi

توسط

Faraz salehi

20 اردیبهشت 00

حذف شده
ممنون فراز جان، فقط اینکه مگر میشه از interface ها آبجکت ساخت؟
محمد گازری

20 اردیبهشت 00

حذف شده
خواهش می کنم . نه , ولی داریم میگیم که شی ورودی متد سازنده کلاس, باید هم نوع اون اینترفیس باشه. یعنی متد های ذکر شده در اون اینترفیس رو دارا باشه.
Faraz salehi

20 اردیبهشت 00

0
حذف شده

سلام و احترام

هدف اصلی این کار اینکه که ما آبجکت هایی از کلاس هایی رو دریافت کنیم که فرزند اینترفیس DatabaseConnectio nInterface هستند

برای مثال فرزند های این اینترفیس میتونن دیتابیس هایی مثل mysql - mongodb و.. باشند و از اون جایی که این کلاس ها فرزند DatabaseConnectionInterface هستند پس مطمئنیم که همشون متدهای پدر رو دارند و در صورت نیاز میتونن جای هم دیگه کار کنن

مثلا نوع ورودی اون construct میتونه شئ mysql باشه چون پدرش DatabaseConnectionInterface است و اگه فردا ما posgres رو دادیم مطمئنیم که پدرش اینترفیس DatabaseConnectionInterface  هست و دوباره متدهایی که پدر مشخص کرده رو داره و میتونه راحت جای دیتابیس دیگه کار کنه

فایل پیوست

امیر صالحی

توسط

امیر صالحی

20 اردیبهشت 00