سلام الله عليكم ورحمته وبركاته إخواني وأحبابي في منتدى نقطة التطوير
واحدة من أكبر المشاكل اللي بنشوفها في مشاريع لارفيل لما بتكبر، هي ظاهرة Fat Controllers؛ تفتح الـ Controller تلاقي الدالة الواحدة فيها 150 سطر: بتفحص الصلاحيات، بتعمل Validation، بتعالج الصور، بتكلم 3 APIs خارجية، وبتعمل إدخال في 4 جداول!
النتيجة كود معقد جداً، مستحيل يتعمل عليه Unit Testing، وأي تعديل فيه كابوس.
في المقال ده، هنتعلم إزاي نخلي الـ Controller رفيع وأنيق (Skinny Controller) بـ 5 سطور بس، ونوزع الشغل باحترافية بين الـ Middleware والـ Form Requests والـ Service Layer.
1. الـ Middleware: حارس البوابة الذكي
أي فحص أمني أو تحقق من حالة المستخدم والطلب لازم يتعمل قبل ما يوصل للكونترولر أصلاً:
2. الـ Form Request: عزل عمليات التحقق من البيانات (Validation)
بدل ما تحط قواعد الـ Validate جوه الدالة:
وفي داخل الكلاس تحدد القواعد ورسائل الخطأ بالعربي، والـ Controller يستقبل الـ Request بعد التأكد من صحته بنسبة 100%.
3. الـ Service Layer: مستودع منطق العمل الحقيقي (Business Logic)
بنعمل كلاس مستقل اسمه
4. النتيجة في الـ Controller: 5 سطور فقط من النظافة والجمال!
المكاسب اللي حققناها:
جربوا تطبيق المنهجية دي في مشاريعكم وشاركوني تجاربكم وأسئلتكم في التعليقات!
واحدة من أكبر المشاكل اللي بنشوفها في مشاريع لارفيل لما بتكبر، هي ظاهرة Fat Controllers؛ تفتح الـ Controller تلاقي الدالة الواحدة فيها 150 سطر: بتفحص الصلاحيات، بتعمل Validation، بتعالج الصور، بتكلم 3 APIs خارجية، وبتعمل إدخال في 4 جداول!
النتيجة كود معقد جداً، مستحيل يتعمل عليه Unit Testing، وأي تعديل فيه كابوس.
في المقال ده، هنتعلم إزاي نخلي الـ Controller رفيع وأنيق (Skinny Controller) بـ 5 سطور بس، ونوزع الشغل باحترافية بين الـ Middleware والـ Form Requests والـ Service Layer.
أي فحص أمني أو تحقق من حالة المستخدم والطلب لازم يتعمل قبل ما يوصل للكونترولر أصلاً:
- التحقق من الرتب والصلاحيات: فحص هل الحساب مفعل، محظور، أو VIP.
- الـ Rate Limiting: منع السبام والطلبات المتكررة من نفس الـ IP.
- تسجيل الطلبات والتتبع (Logging & Metrics).
2. الـ Form Request: عزل عمليات التحقق من البيانات (Validation)
بدل ما تحط قواعد الـ Validate جوه الدالة:
Bash:
من فضلك قم , تسجيل الدخول أو تسجيل لعرض المحتوى
3. الـ Service Layer: مستودع منطق العمل الحقيقي (Business Logic)
بنعمل كلاس مستقل اسمه
UserService في مجلد app/Services:
PHP:
من فضلك قم , تسجيل الدخول أو تسجيل لعرض المحتوى
4. النتيجة في الـ Controller: 5 سطور فقط من النظافة والجمال!
PHP:
من فضلك قم , تسجيل الدخول أو تسجيل لعرض المحتوى
المكاسب اللي حققناها:
- إعادة الاستخدام: تقدر تستخدم نفس الـ
UserServiceفي الـ Web، وفي الـ API، وفي أوامر الـ Console Commands بدون تكرار الكود. - سهولة الفحص (Testing): تقدر تعمل Mock للخدمة وتعمل Unit Test للكونترولر في ثواني.
- وضوح وسهولة صيانة لا تقارن.
جربوا تطبيق المنهجية دي في مشاريعكم وشاركوني تجاربكم وأسئلتكم في التعليقات!