خلال الأسبوع الثالث من Hacktoberfest، قررت المساهمة في مشروع أصغر ولكن واعد: نظام المزاد عبر الإنترنت. على الرغم من أن المشروع لا يزال في مراحله الأولى، إلا أنه يُظهر بالفعل إمكانية النمو، وقد رأيت فرصة للمساعدة في تحسين قاعدة التعليمات البرمجية الخاصة به. كانت مهمتي هي إعادة هيكلة المشروع من خلال تقليل التعليمات البرمجية الزائدة وتحسين البنية العامة، مما يجعله أكثر قابلية للصيانة وقابلة للتطوير.
كان الهدف الأساسي لمهمتي هو تحديد أنماط التعليمات البرمجية المتكررة وإعادة هيكلتها لجعل قاعدة التعليمات البرمجية أكثر نظافة وأسهل في الصيانة. يمكن أن يؤدي تكرار التعليمات البرمجية إلى عدم الاتساق، ويجعل التحديثات المستقبلية أكثر صعوبة، ويزيد من احتمالية حدوث أخطاء. ومن خلال تبسيط التعليمات البرمجية، كنت أهدف إلى تحسين الكفاءة دون تغيير الوظيفة.
1. معالجة الأخطاء غير المتزامنة المركزية: إحدى المشكلات الشائعة في مشاريع Express.js هي كتل محاولة الالتقاط المتكررة لمعالجة الأخطاء في المسارات غير المتزامنة. لمعالجة هذه المشكلة، قدمت وظيفة مساعدة تسمى asyncHandler والتي تغطي جميع الوظائف غير المتزامنة، مما يضمن اكتشاف أي أخطاء تلقائيًا ومعالجتها بشكل متسق عبر التطبيق.
// utils/asyncHandler.js const asyncHandler = (fn, errorMessage = "Internal server error") => (req, res, next) => Promise.resolve(fn(req, res, next)).catch((error) => { console.error(`Error: ${error.message}`); res.status(500).json({ error: errorMessage }); }); module.exports = asyncHandler;
لم يؤدي هذا التغيير إلى إزالة كتل محاولة الالتقاط الزائدة فحسب، بل جعل الكود أكثر نظافة وأكثر تركيزًا على منطق الأعمال، بدلاً من معالجة الأخطاء.
2. وظائف الأداة المساعدة لقاعدة البيانات: كان للمشروع عدة مسارات تتفاعل بشكل مباشر مع قاعدة البيانات، وغالبًا ما تكرر استعلامات مماثلة. لتقليل التكرار، قمت بإنشاء مجموعة من الوظائف المساعدة القابلة لإعادة الاستخدام للتعامل مع استعلامات قاعدة البيانات الشائعة، مثل جلب معلومات المشتري أو استرداد المعاملات.
// utils/dbUtils.js const getBuyerById = async (buyerId) => { const query = "SELECT * FROM Buyers WHERE Buyer_ID = $1"; const { rows } = await pool.query(query, [buyerId]); return rows.length > 0 ? rows[0] : null; }; const getTransactionsByBuyerId = async (buyerId) => { const query = "SELECT * FROM Transactions WHERE Buyer_ID = $1"; const { rows } = await pool.query(query, [buyerId]); return rows; }; module.exports = { getBuyerById, getTransactionsByBuyerId };
الآن، بدلاً من كتابة استعلامات SQL مباشرةً في كل مسار، يمكن لقاعدة التعليمات البرمجية الاعتماد على وظائف الأداة المساعدة هذه، مما يقلل التكرار ويجعل إدارة المنطق أسهل.
3. التعامل مع الاستجابة الموحدة: هناك مجال آخر للتحسين وهو التعامل مع الاستجابة. تحتوي المسارات المختلفة على أنماط غير متناسقة لإرسال استجابات النجاح والأخطاء. ولتوحيد هذا الأمر، قدمت وظائف مساعدة مثل send404، وsend500، وsendSuccess.
نظرًا لأن المشروع لا يزال في مراحله الأولى، فقد لاحظت بعض المسارات المفقودة مثل POST وDELETE وPUT التي كان من الممكن أن أقوم بإنشائها بسهولة. ومع ذلك، قررت أن ألتزم فقط بالمشكلة التي أطرحها.
اسمحوا لي أن أعرف في التعليقات، كيف تتعامل عادةً مع هذا النوع من المواقف التي يمكنك المساهمة بها بشكل أكبر... هل تفتح إصدارًا جديدًا، هل تقوم فقط بإنشائه وإجراء طلب سحب؟ أحب أن أقرأ تجربتك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3