تخطَّ إلى المحتوى

Chain of Responsibility

نمط سلسلة المسؤولية Chain of Responsibility

Chain of Responsibility يمرّر الطلب عبر سلسلة من المعالجين، وكل معالج يقرر إما يتعامل مع الطلب أو يمرره للمعالج التالي.

كل معالج (Handler) يحتفظ بمرجع للمعالج التالي في السلسلة. الطلب يبدأ من أول معالج، وينتقل تلقائيًا حتى يجده معالج قادر على التعامل معه أو تنتهي السلسلة. الأساس النظري وراء middleware في Express/Next.js: كل دالة وسيطة تقرر تعالج الطلب أو تستدعي next() لتمريره.

الصياغة

handler1.setNext(handler2).setNext(handler3);
handler1.handle(request);

📄 مثال

class Handler {
  setNext(h) { this.next = h; return h; }
  handle(req) { if (this.next) return this.next.handle(req); console.log("لا يوجد معالج"); }
}

class AuthHandler extends Handler {
  handle(req) { if (!req.token) return console.log("مرفوض"); super.handle(req); }
}

class LoggerHandler extends Handler {
  handle(req) { console.log(`طلب من ${req.user}`); super.handle(req); }
}

const auth = new AuthHandler();
auth.setNext(new LoggerHandler());
auth.handle({ user: "سارة", token: "abc" }); // طلب من سارة

أهم النقاط

النقطةالوظيفة
التصنيفنمط سلوكي (Behavioral)
يحل مشكلةشروط متشعبة لاختيار من يعالج الطلب بين عدة معالجين محتملين
أشهر تطبيق واقعيmiddleware في Express/Next.js — كل طبقة تعالج أو تستدعي next()

⚠️ أخطاء شائعة

  • نسيان تمرير الطلب للمعالج التالي أو عدم وجود معالج افتراضي بنهاية السلسلة — فيضيع الطلب بصمت

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.