محتويات الدورة

NestJS / المتقدم: العمر وأدلة العمل الموزع / الدرس 13

نطاقات المزود والسياق وتصميم الدورات

وافق عمر المثيل مع حالته المتغيرة ولا تستخدم تغيير النطاق بديلاً عن الملكية الواضحة.

وقت القراءة التقريبي: 5 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح عمر المفرد والطلب والعابر ضمن رسم الاعتماد.
  • افصل دورة الملف والوحدة والمزود.

يحدد النطاق من يشارك المثيل

يشارك المزود الافتراضي عادة ضمن سياق التطبيق المالك. يرتبط نطاق الطلب بسياقه ويقدم العابر مثيلات بحسب حل المستهلك لا مفرداً عاماً. هذه خيارات عمر لا حدود تفويض تلقائية. يناسب المفرد إعداداً ثابتاً أو مجمعاً، وقد تخلط currentPrincipal المتغيرة الطلبات. اختر مسؤولية الحالة قبل النطاق؛ وقد يؤثر اعتماد طلب في نطاق مستهلكيه، فراجع الرسم كله لا مزخرفاً واحداً. لا يصلح صنع كل خدمة بعمر الطلب مشكلة هوية إن بقي مسار آخر يقرأ حالة عامة، وقد يضاعف بدل ذلك الموارد التي تحتاج المشاركة.

استعمل نطاق الطلب لحالة طلب فعلية

يعلن الجزء حافظ سياق بعمر الطلب ويفترض أن دمجاً سابقاً يقدم هوية متحققة ولا يصادقها. لا تضع مجمع قاعدة جديداً بكل مثيل؛ احفظ المشترك بمزود مناسب ومرر سياقاً ضيقاً. تختلف سياقات HTTP وRPC والطويلة فاستعمل الرمز الموثق للمنصة. لا تعمم ميزة يدعمها Nest 12 في نقل إلى تطابق كل السياقات. لم تنشئ الحاوية المثال. ينبغي أن يبين التصميم متى يتقاعد السياق ومن يملك الموارد التي تستمر بعده حتى لا يستبقي عمل خلفي هوية طلب انتهى.

typescript حافظ سياق بعمر الطلب توضيحي
@Injectable({scope:Scope.REQUEST})
export class OperationContext {
  principal!: Principal;
}

لم يضمن الاستيراد أو إثبات الهوية. يضبط النطاق العمر ولا يتحقق من الهوية.

احفظ حالتي عملية اصطناعيتين مستقلتين

يعيد المصنع المحلي كائن حالة جديداً لكل استدعاء. لا تؤثر زيادة عداد سياق واحد في عداد الآخر، فتظهر قاعدة استقلال الحالة المقصودة من دون Nest. هذه خاصية تخصيص كائنات JavaScript عادية، وليست إثباتاً أن الإطار ينشئ مزود نطاق الطلب صحيحاً. يجب أن يحل الاختبار الحقيقي السياقات بواجهات الحاوية المختارة ويتحقق من هوية المثيلات ورسم اعتمادها الفعلي. لا تعتبر الغلاف الخارجي الجديد عزلاً إذا ظل يشير إلى كائن هوية مستدعي مشترك قابل للتغيير. تشمل مسؤولية ملكية الحالة المراجع المتداخلة أيضاً. حدد القيم الثابتة التي يمكن مشاركتها والحالة التي تخص عملية واحدة، واختبر تعديلها صراحة؛ فنسخ الغلاف لا ينسخ اعتماداته المتداخلة نسخاً عميقاً.

javascript نموذج محلي كامل لاستقلال السياق
function operation(principalId) {return {principalId,calls:0};}
const a=operation("p1"), b=operation("p2");
a.calls++;
console.assert(a !== b && a.calls === 1 && b.calls === 0);
console.assert(b.principalId === "p2");

يبقى الكائنان مستقلين دون حل معرف سياق Nest أو اعتماد ذي نطاق.

أصلح رسم الاعتماد المعني

قد ينتج استيراد ملف دائري رمزاً غير متاح، وتعطل دورة الوحدة التركيب، ويتبادل منشئا مزودين الاعتماد. شخص الرسم قبل forwardRef في كل مكان. استخرج العقد لملف خفيف وانقل التنسيق إلى مالك يعتمد الجانبين. يفيد التأجيل حيث يدعم ولا يثبت حد مجال أو ترتيب منشئ حتمياً. لا تنفذ عملاً خارجياً حساساً للترتيب في المنشئ، بل بتهيئة أو مصنع واضح بفشل مضبوط. قد يختفي خطأ الاستيراد بتعديل ملف الرمز دون أي تغيير بنطاق المزود، ولهذا يهم الحفاظ على الفرق أثناء التحقيق.

تحقق من كلفة النطاق وادعاء الدورة

قد يزيد نطاق الطلب الكائنات ويغير التهيئة ولا يلزم منه رقم أداء عام. قس حملاً ممثلاً مأذوناً بعد صحة المسؤولية. تحقق من خطافات النطاق والإصدار ولا تفترض أن كل كائن طلب يتلقى إيقاف التطبيق. تحمل المهمة الطويلة سياقاً أدنى صريحاً لا كائن HTTP محتفظاً به. يشغل المقرر التخصيص فقط ولا يحل نطاقاً أو خطافاً أو قياس حاوية. اختبر الحدود مستقلة بدمج اصطناعي مأذون. يتيح ذلك اختيار نطاق لأسباب صحة واضحة بدلاً من وصفة تجعل المفرد خطراً دائماً أو الطلب حلاً أمنياً عاماً.

الأخطاء الشائعة وإصلاحها

يرى طلب هوية آخر

لماذا يحدث؟
احتفظ مزود مفرد بحالة طلب قابلة للتغيير بين الاستدعاءات.
كيف تصلحه؟
استخدم سياق عملية مناسباً وتجنب مشاركة هوية مستدعي قابلة للتغيير.
كيف تتجنب تكراره؟
اختبر الهويات المتداخلة والمراجع المتداخلة داخل كائنات السياق.

يفتح كل طلب مجمع مصدر

لماذا يحدث؟
اتبعت ملكية المورد المشترك نطاق الطلب عن طريق الخطأ.
كيف تصلحه؟
اجعل مجمع المصدر بعمر التطبيق واحقن عمليات ضيقة تحتاجه.
كيف تتجنب تكراره؟
راجع سلسلة الاعتمادات التي يتأثر نطاقها كاملة.

لا تصلح forwardRef رمزاً غير متاح

لماذا يحدث؟
كان السبب تهيئة ملف أو تصديره، وليس دورة المزودين المفترضة.
كيف تصلحه؟
حدد رسم الاعتماد الذي فشل فعلياً وأصلح ذلك الرسم.
كيف تتجنب تكراره؟
أبق تعريفات رموز الحقن قليلة الاعتماد لتجنب دورات الملفات.

اختبر فهمك

1. كيف يمكن لغلافي سياق جديدين أن يسربا حالة رغم اختلاف هويتهما؟

اعرض الحل المشروح

قد يشتركان في مرجع متداخل إلى هوية مستدعي قابلة للتغيير أو إلى مخبأ قابل للتغيير. إنشاء غلاف خارجي جديد لا ينسخ الاعتمادات المتداخلة نسخاً عميقاً. حدد القيم الثابتة التي لا تتغير، والحالة التي يجب أن يملكها استدعاء عملية واحدة فقط، ثم اختبر التغييرات المتداخلة صراحة. يتجنب النموذج المحلي هذه المشكلة باستعمال نص للهوية، لكن رسم المزودين الحقيقي يجب أن يتحقق من مراجعه الخاصة.

2. هل جعل كل المزودين بنطاق الطلب افتراض آمن؟

اعرض الحل المشروح

لا. قد يكرر الموارد المشتركة، ويغير أعمار الاعتمادات، ويخفي مسؤولية ملكيتها من دون تنفيذ التفويض. اختر النطاق من الحالة المتغيرة الفعلية واحتياجات الموارد، واحفظ سياسة المجال وتحقق من سلوك الحاوية. لا يوجد إعداد نطاق عام يعوض هذه القرارات التصميمية أو يجعل مشاركة كل مورد آمنة تلقائياً.

أهم ما تعلمته

  • النطاق عقد عمر لا اختصار ضبط وصول.
  • شخص الدورة برسمها واحفظ مسؤولية المورد.

المراجع الرسمية