عبدالفتاح الصلوي

مالفرق بين event , listener و ال observer ؟

كتبها : عبدالفتاح الصلوي / في رصيف : Laravel

مالفرق بين event , listener و ال observer ؟

#كلام_مبرمجين (شغل مخبرين)
إجابات اسئلة :

مالفرق بين event , listener و ال observer ؟

يقومان على ذات الفكرة  


Event , listener  :

عند حدوث حدث ما (event)  يتم تنفيذ (listener) واحد أو اكثر .
فيمكنك مثلا  عند اطلاق حدث معين تنفيذ عدة  اشياء حيث يمكن هنا تقسيم الاشياء في اكثر من listener .
فعند عملية الشراء مثلا نقوم بإرسال إشعار ونقوم  بطباعة فاتورة وما إلى ذلك .

 Eloquent model and observer

وكمثال آخر لو نظرنا الى  Eloquent model فهو (فصيح ) يقوم (بارسال/إخبار /بث) أحداث عند كل عملية (ليسمح لنا بتنفيذ بعض العمليات عند الحاجة)
 فعند الاضافة  (سينادي بأعلى صوت مسموع ) انا (اسمي --- من نوع Eloquent) أقوم بحدث  الإضافة، وعندما ينتهي سيبلغنا بأنه انتهى من  الإضافة (شفافية ما بعدها شفافية ولو كان عند أحد اعتراض أو مانع فليقم بما يجب فليساعد مثلا بتزويده بمعلومات كانت ناقصه، أو يقوم بتنفيذ ما يرتبط بهذه العملية كتحديث البيانات المخزنة في الcache) ،وكذا عند التعديل  وعند الحفظ  وعند الحذف وهكذا .

ولمعرفة كل الاحداث التي يذيعها راجع الرابط:https://laravel.com/docs/9.x/eloquent#events


 ولكن هل يمكن أن نقوم بتجميع كل الاشياء المبعثرة في عدة listeners في كلاس واحد ؟
أجل ولما لا فيالها من فكرة  وسنصف  هذا الكلاس بأنه observer (مراقب /مخبر) سنعطيه مهمة مراقبة model وسنقوم (بتحديد) وتجميع كل العمليات التي نريد تنفيذها على  model معين في كلاس واحد (سنقول للمخبر أن ينفذ العمليات بحسب الحاجة)  وكل دالة في الكلاس ستنفذ عند حدوث حدث ما. وبما أن الاحداث بالأصل يتم بثها واشعار الكل من الmodel فهنا  الobserver سيستمع إليه وينفذ الدوال المرتبطة  التي ستنعكس تسميتها على الأحداث في الmodel . (مالم يجبر ال model على العمل خفية وفي صمت) فمثلا بالامكان ان نخرس موديل لعدة عمليات باستخدام withoutEvents أو نسكته لعملية واحدة ك saveQuietly() وهنا سيقوم بالعمل وهو صامت ولن يعرف مخبرنا بما حدث .


#laravel

علامات ذات صلة :