إزاي تنظف كود لارافيل (Laravel) وتستخدم الـ Observers عشان تريح دماغك
لو بتشتغل بـ لارافيل (Laravel) بقالك فترة، أكيد مريت بالمرحلة اللي الـ Controller فيها بيبدأ يكبر ويورم. بتلاقي نفسك حاطط فيه كود إرسال إيميلات، وتحديث بيانات في جداول تانية، وربما إشعارات (Notifications)، وكل ده بمجرد ما يحصل حفظ (Save) لـ Model معين. ده اللي بنسميه Fat Controllers، وده بيمثل كابوس حقيقي لأي حد بيعمل صيانة للكود بعد كدة. النهاردة هنتكلم عن الحل السحري اللي هو الـ Observers.
Table of contents [Show]
يعني إيه أصلاً Observers في لارافيل؟
الـ Observers هي ببساطة وسيلة بتخليك "تراقب" دورة حياة الـ Model بتاعك. لما تعمل إنشاء (Create)، أو تحديث (Update)، أو حذف (Delete) لأي سجل في قاعدة البيانات، الـ Observer بيسمع الحدث ده وبينفذ كود معين أنت محدده. فبدل ما تعك الكود في الـ Controller، أنت بتفصل الـ Logic ده في مكان مستقل، وده بيحقق مبدأ الـ Single Responsibility Principle (SRP) بشكل احترافي.
ليه لازم تستخدم الـ Observers في شغلك؟
- نظافة الكود (Clean Code): الـ Controller بتاعك هيفضل مركز بس على استقبال الريكويست وإرجاع الرد.
- سهولة الصيانة (Maintainability): لو حبيت تغير كود إرسال الإيميل، هتروح لملف واحد مش هتدور في كل الـ Controllers.
- إعادة الاستخدام (Reusability): الكود اللي بتكتبه في الـ Observer بيشتغل سواء عملت العملية من الـ Controller أو من الـ Console Command.
خطوات إنشاء واستخدام الـ Observers
العملية أسهل مما تتخيل، خلينا نفترض إن عندنا User Model وعايزين نبعت رسالة ترحيب أول ما اليوزر يتسجل.
أولاً: إنشاء الـ Observer
عن طريق الـ Artisan Command، هتكتب الأمر ده في التيرمينال:
php artisan make:observer UserObserver --model=User
ثانياً: كتابة الـ Logic
هتلاقي ملف اتكون في مسار App/Observers/UserObserver.php، جوه الملف ده هتحط الـ Logic بتاعك:
public function created(User $user)
{
// هنا ممكن تبعت إيميل ترحيبي
Mail::to($user->email)->send(new WelcomeEmail($user));
}
ثالثاً: تسجيل الـ Observer
عشان لارافيل يحس بالـ Observer بتاعك، لازم تسجله في الـ AppServiceProvider.php جوه دالة الـ boot:
User::observe(UserObserver::class);
نصائح احترافية عشان تطور مهاراتك
بص يا صديقي، الـ Observers أداة قوية جداً لكن "ما تفرطش" في استخدامها. بلاش تحط فيها عمليات تقيلة جداً زي معالجة الصور أو عمليات معقدة لأنها هتأخر عملية الحفظ في قاعدة البيانات. في الحالات دي، يفضل تستخدم الـ Queues مع الـ Observers عشان تخلي الموقع سريع.
تعلمك للمفاهيم دي هي اللي بيفرق بين "مبرمج بيكتب كود" وبين "مهندس برمجيات بيبني سيستم قابل للتوسع". جرب تبدأ تطبق ده في مشروعك الجاي، وشوف إزاي الـ Controller بتاعك بقى خفيف ونضيف.