الهدف
بنهاية الدرس تقدر تأخذ route handler ممزوج (HTTP + business logic + database) وتقسّمه لثلاث ملفات منفصلة، وتضيف JSDoc documentation لـ public functions.
ليش هذا الحين؟
ترى في البداية، كل الكود في route handler واحد — يشتغل. المشكلة تجي بعد 3 أشهر لما تحاول تضيف feature أو تصلح bug. تقرأ كود كتبته وما تفهمه. هذا يعني إنك كتبت كود ما يقبل التغيير. الـ refactoring والـ patterns مو نظرية — هي الطريقة اللي تخلي مشروعك يعيش أكثر من شهرين.
الفكرة
Refactoring = تحسين الهيكل بدون تغيير السلوك. البرنامج يسوي نفس الشي قبل وبعد — بس الكود أوضح وأسهل في التعديل.
3 Patterns للـ Solo Founder:
1. Repository Pattern — كل database access في مكان واحد:
❌ بدونه: Route Handler → prisma.user.findMany() مباشرة
✅ معه: Route Handler → userRepository.findAll() → prisma.user.findMany()
الفايدة: لو تغيّرت الـ database أو ORM، تعدّل في مكان واحد.
2. Service Layer — business logic بعيدة عن الـ HTTP:
❌ بدونه: Route Handler فيه validation + calculations + DB + email sending
✅ معه: Route Handler (HTTP only) → Service (business logic) → Repository (DB)
الفايدة: تقدر تختبر الـ business logic بدون HTTP.
3. Observer Pattern — side effects بعيدة عن الـ main logic:
✅ معه: createOrder() → ينشر event → emailService يسمع → يرسل email
الفايدة: تضيف side effects جديدة بدون ما تلمس الـ main function.
Documentation: JSDoc للـ public functions بس. ما تكتب comments تشرح "شنو يسوي" الكود — الكود نفسه المفروض يوضّح هذا. اكتب "ليش" بدل "شنو".