نحوه پیاده سازی notification

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

سلام و احترام

در ویدیو مطرح شده بهتر نبود که بیایم یک اینترفیس کلی تعریف کنیم که هر کلاس ارسال کننده notification باید یک متود send  داشته باشه.

و بعد بیایم یک کلاس abstrac تعریف کنیم که متود send و params و .. رو پیاده سازی کنه.

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

فرضا من میخوام پیامک بفرستم میگم :

(new Sms)-send($params);

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

(new Email)-send($params);

استفاده کنم.

به نظر شما این بهتر هست یا اینکه یک کلاس کلی واسط داشته باشیم ؟ مثل همین چیزی که تو ویدیو پیاده سازی کردن که کلاس notification بیاد عملیات ارسال رو انجام بده

(new Notifications)->send('sms', $params);

به صورت خلاصه سوال من این هست که یک کلاسNotifications واسط نیاز هست یا اینکه بیایم از هر کلاس Sms و Email و.. مستقیم استفاده کنیم؟ با دلیل بگید ممنون میشم تا بهتر درک کنم’

فایل پیوست

Behnam Moradi
Behnam Moradi

20 مرداد 00

1
حذف شده

درود

حالا جلوتر که برید مباحث رو بیشتر درک میکنید ولی اگه بخوام سوالتون رو پاسخ بدم به این شکل میشه (موردی که شما گفتید توی اصل های جلوتر در SOLID مورد برسی قرار میگیره و تعریف interface هم جزی از اونهاست و باید جوری پیاده سازی بشه که به قول شما بشه ازشون به شکل مستقل هم استفاده کرد) 

 

اول از همه دیدتون رو abstract کنید به قضیه، ینی چی؟

فرض کنید من میخوام توی سیستم خودم notification ارسال کنم و همین هم برام مهمه و نمیخوام درگیر ساخت شی داخل کدم بشم و اگه خواستم بتونم سریع توی runtime نوع نوتیفیکیشن رو هم عوض کنم. ما اینجا یه کلاس داریم به اسم notification که هر نوع notificationی که بخوایم رو برای ما ارسال میکنه و فقط کافیه نوع  notification رو بهش پاس بدیم

(توی سرفصل دیزاین پترن ها بیشتر درگیر پیاده سازی میشید و این مباحث رو خوب درک میکنید)

 

کلاس notificationی که هم اینجا داریم وظیفش اینکه این چندتا کلاس مختلفی که داریم و وظیفشون هم ارسال نوتیفیکیشن هستش رو بتونیم ازشون به سادگی بدون اینکه سورس کدمون رو تغییری بدیم استفاده کنیم

 

توی مثال اول که آوردید شما فرض کنید که نام کلاستون رو عوض میکنید یا اینکه میخوای کلاس جدیدی رو جایگزین کلاسی که نوشتید بکنید (مثلا Sms رو میخواید بکنید SmsNotification)، شما مجبور میشید که برید هر جای کدتون که برای مثال از کلاس Sms یک شی ایجاد کردید باید برید جایگزین کنید با اسم جدیدش و همین ممکنه کلی دردسر باشه براتون

 

اما حالا همین سناریو رو شما بیارید داخل مثال دوم که مثال خود این جلسه هم هست،‌ شما اگه تغییری برای کلاس sms داده باشید همون یه جا (داخل کلاس notification) تغییرش میدید و بقیه جاها که از کلاس notification استفاده کردید مشکلی پیش نمیاد

 

یا مثلا میخواید درجا توی runtime نوتیفیکیشن sms رو به email یا به telegramNotification و.. جایگزین کنید، شما توی این نقطه دوباره شاید مجبور به نوشتن شرطهای اضافه بشید اما توی مثال ویدیو به سادگی پاس دادن پارامتره

فایل پیوست

امیر صالحی

توسط

امیر صالحی

20 مرداد 00