نظام إدارة الموارد الديناميكي
محمد علاء
واحد من أكثر الأشياء اللي استمتعت فيها وأنا أشتغل على صفحة الإدارة (Admin Page) لموقعي.
بالبداية ما كنت متوقع التحديات اللي راح أواجهها، بس مع الوقت اكتشفت إن فيه أنماط متكررة في إدارة الموارد المختلفة، وكان لازم احصل طريقة أرتب فيها الأمور بدون ما أعيد نفس الشغل مليون مرة !.
بناء صفحة إدارة المقالات
أول شيء اشتغلت عليه كان صفحة إدارة المقالات، اللي كان فيها جدول بيانات مع تقسيم صفحات (Pagination)استخدمت TanStack Table لأنه مرن جدًا والـAPI حقه رهيب، ومع أني استخدمت فوقه shadcn لتسهيل بناءه وما اضطر ابنيه من الصفر، بحكم انه headless إلا إن فهم الآلية عمله والرجوع ل documentation خلاني أقدر أخصصه بشكل كبير
التحدي كان في تكرار نفس الشغل في كل صفحة إدارة 🔄
صفحه ادارة المشاريع
مع الوقت لاحظت إني كل ما احتجت أضيف صفحة إدارة جديدة، أرجع أكرر نفس العناصر:
- جدول بيانات
- زر إضافة عنصر جديد
- تقسيم صفحات (Pagination)
- عمليات CRUD (إضافة، حذف، تعديل، عرض
مثلًا، صفحة ادارة المشاريع، أو مشتركين النشرة البريدية كلها فيها نفس الأشياء. فصرت أفكر، هل معقول أني كل مرة بنسخ نفس الجدول مع نفس العمليات؟ أكيد لا،
لأنه بيصير فيه تكرار غير ضروري (Redundancy)، ومو بس كذا افترض اني ققرت اغير تصميم جدول البيانات هل من المعقول اني اروح اعدله 3 مرات ؟
فكان لازم احصل حل يخلي إدارة الموارد ديناميكية وقابلة للتوسع بدون ما أعيد نفس الكود.
الحل: نظام إدارة موارد ديناميكي
قررت أسوي صفحة إدارة ديناميكية تقدر تتعامل مع أي (نوع بيانات)، بحيث اخليها مرنة قد ما أقدر، بس بنفس الوقت لازم أضمن Type Safety وما أخلي الكود يصير فوضوي
هنا تجي فائدة Generics في TypeScript،
اللي ساعدتني على:
- التأكد إن كل نوع بيانات يتم التعامل معه بشكل آمن أثناء الاستخدام وليس تحديده بشكل صريح (explicitly)
- تجنب الأخطاء الناتجة عن اختلاف أنواع البيانات.
والي صار الأن انه كل الي عليي اسوي ملف config واحد و اُعرف فيه ايش بيكون في صفحه الاداره والجدول اعمدته ، والصفحه تتكون تلقائياً ✨
هل كل Abstraction مفيد فعلًا؟
لكن هنا السؤال، هل كل (تجريد) Abstraction فعلًا يخدم الفكرة، ولا مجرد تعقيد على الفاضي؟ 🤔
مو كل عملية تجريد بتكون مفيدة، وبعض الأحيان ممكن تزيد التعقيد بدون ما تضيف قيمة فعلية. فكان لازم أوزن الموضوع وأتأكد إن الحل اللي سويته يبسط الشغل بدل ما يعقده، وإنه يساعدني على إعادة استخدام الكود بشكل عملي بدون ما أدخل في دوامة التعقيدات الزايدة over engineering.
بعد ما سويت هذي الفكرة، صار عندي نظام إدارة موارد ديناميكي أقدر من خلاله أضيف أي نوع جديد بسهولة، بدون ما أكتب نفس الكود كل مرة. صار النظام مرن وقابل للتوسع، وما فيه تكرار ممل، وكل شيء صار DRY (Don’t Repeat Yourself)