NestJS / المتوسط: السياسات والموائمات والمصادر / الدرس 7
المزود المخصص والإعداد والبدء غير المتزامن
ابن القدرات من إعداد متحقق منه واجعل الجاهزية غير المتزامنة جزءاً من مسؤولية الاعتماد.
في هذه الصفحة
أهداف الدرس
- ميز أدوار useValue وuseClass وuseExisting وuseFactory.
- ارفض الإعداد المخالف مبكراً دون كشف الأسرار.
اختر صيغة المزود للهوية المقصودة
يقدم مزود القيمة قيمة موجودة، وتطلب الفئة بناء تنفيذ، ويعيد الاسم المستعار استعمال تسجيل آخر، ويحسب المصنع قدرة من اعتمادات محقونة. تختلف آثار المثيل والدورة. تفيد useExisting عندما يسمي رمزان المثيل المدار نفسه؛ ولا تعادلها useClass. وثق مسؤول التنظيف والحالة القابلة للتغيير. لا تجعل كائن الإعداد مكاناً عرضياً للهوية الحالية أو عدادات الطلب. يعكس اختيار الصيغة هل تريد مشاركة كائن أو بناء آخر أو اشتقاق قيمة، ولذلك يؤثر في اختبار الموارد وفي عدد العملاء الذين قد يبدأهم التطبيق.
اجعل اعتمادات المصنع صريحة
ينشئ الجزء خيارات ضيقة من خدمة إعداد ولا يفتح اتصالاً. تسمي inject الاعتمادات بترتيب الوسائط وتتيحها الوحدة المالكة. قد يعيد المصنع وعداً ينتظره Nest قبل بناء المستهلك، لكن الانتظار الدائم ليس خطة جاهزية. عرف بدءاً محدوداً وخطأ آمناً في الموائم. لا تقرأ البيئة في كل المجال؛ يجعل التحقق المركزي الفقد والمخالفة قابلين للإنتاج المتكرر ويبعد الأسرار عن المتحكم. لا تعني تسمية الخيار نوعياً أن النص الخام في البيئة صار عدداً؛ يجب أن ينفذ التحويل المحدد قبل تقديم القيمة للمستهلك.
const catalogOptions = {
provide: CATALOG_OPTIONS,
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
pageLimit: parsePageLimit(config.get("CATALOG_PAGE_LIMIT"))
}),
};
تفترض الرموز والخدمة والمحلل؛ يصف المصنع الحقن ولا يترجم أو ينفذ.
يحتاج نص البيئة عقداً فعلياً ذا أنواع
تبقى قيمة البيئة نصاً ولو بدت عدداً أو منطقاً؛ السلسلة false صادقة في JavaScript فلا تصلح Boolean(value) محللاً عاماً. حدد الصياغة والمدى والافتراض والمطلوب. ميز الاختياري الغائب عن المقدم المخالف ولا تعد لافتراض عند كل خطأ بصمت. تحقق قبل إعلان الجاهزية واذكر اسم الإعداد دون الاعتماد السري. تنظم الوحدات الديناميكية والإعداد ذو النطاق التركيب ولا تتحقق تلقائياً من كل قيمة مصنع مخصص. يحفظ الرفض المبكر معنى الضبط بدلاً من إقلاع ظاهري يعمل بحدود تختلف عن التي طلبها مسؤول النشر.
حلل إعداداً محدوداً محلياً
يقبل المحلل حداً عشرياً موجباً حتى خمسين ويعطي عشرة عند الغياب فقط. يرمي للفارغ والجزئي والزائد. الأرقام اختيار عينة لا نصيحة ضبط عامة. يستعمل الموائم الحقيقي العقد نفسه لمصادر النشر ويحفظ العدد بخيار ثابت. لا يقرأ النموذج بيئة فعلية أو ملفاً أو يبني مزوداً، ويثبت اختلاف الغياب والمخالفة بفرعين حتميين. عند دمجه لاحقاً يجب التأكد من أن المصنع يستعمل هذه القاعدة فعلاً ولا يمرر القيمة الخام لموضع يتوقع عدداً موثوقاً.
function parseLimit(text) {
if (text === undefined) return 10;
if (typeof text !== "string" || !/^[1-9][0-9]*$/.test(text)) throw new Error("INVALID_LIMIT");
const n=Number(text); if (!Number.isSafeInteger(n) || n > 50) throw new Error("INVALID_LIMIT");
return n;
}
console.assert(parseLimit(undefined) === 10);
console.assert(parseLimit("20") === 20);
let rejected=false; try {parseLimit("20rows");} catch {rejected=true;}
console.assert(rejected);
يفترض الغياب عشرة ويحول الصحيح لعشرين ويرفض الجزئي دون الوصول لبيئة العملية.
افصل فشل البناء عن اعتماد مجهول
يختلف رفض المصنع بعد حل مدخلاته عن رمز مفقود. احفظ المرحلة ولا تجعل الوحدات عامة لإسكات البدء. تحتاج التهيئة والتنظيف مسؤولاً، بما فيه نجاح مصدر وفشل آخر؛ أغلق المملوك وفق البروتوكول بدلاً من عامل نصف جاهز. تحقق من البناء غير المتزامن ببدائل مضبوطة عند الإذن. يشغل المقرر المحلل فقط ولا يدعي انتظار Nest أو تحميل سر أو اتصال مصدر. يوجه هذا الفرق المراجع إلى خطأ الإعداد أو المورد حين يكون رسم الحقن صحيحاً، فلا يكرر التسجيلات بحثاً عن حل غير متعلق.
الأخطاء الشائعة وإصلاحها
تفعل السلسلة false ميزة
- لماذا يحدث؟
- استعملت صدقية سلسلة JavaScript بدلاً من تحليل إعداد منطقي صريح.
- كيف تصلحه؟
- حلل مفردات القيم المنطقية وفق عقد إعداد موثق.
- كيف تتجنب تكراره؟
- اختبر الإعداد الغائب والنصين false وtrue والنص المخالف.
ينشئ رمزا اسم مستعار عميلين
- لماذا يحدث؟
- استعمل useClass حيث كان المقصود مشاركة هوية مزود موجود عبر useExisting.
- كيف تصلحه؟
- اربط المزود الموجود المقصود وراجع الطرف الذي يملك مورده.
- كيف تتجنب تكراره؟
- تحقق من هوية المثيل في اختبار حاوية محدد.
يعلق البدء وتبدو الجاهزية سليمة
- لماذا يحدث؟
- افتقد البناء غير المتزامن عقداً يحد وقت إكماله.
- كيف تصلحه؟
- قيد التهيئة ولا تعلن الجاهزية إلا بعد اكتمال الشروط السابقة.
- كيف تتجنب تكراره؟
- اختبر رفض التهيئة وتنظيف الموارد عند فشل البدء الجزئي.
اختبر فهمك
1. لماذا تختلف قيمة حد مقدمة لكنها مخالفة عن قيمة لم تقدم أصلاً؟
اعرض الحل المشروح
يسمح الغياب باختيار افتراض موثق بصورة مشروعة، بينما يشير النص المخالف إلى خطأ في إعداد النشر. قد يخفي استعمال الافتراض للحالتين الحد المقصود ويجعل الخدمة تخالف الإعداد الذي راجعه الفريق. أبق التحقق صريحاً مع تشخيص آمن يذكر اسم الإعداد، ثم اختبر الموائم الذي يقدم القيمة الخام إلى المحلل.
2. هل يجعل المصنع غير المتزامن مصدر البيانات مرناً تلقائياً؟
اعرض الحل المشروح
لا. يسمح المصنع لعملية بناء الاعتماد بأن تنتظر نتيجة فقط. تظل المواعيد النهائية والإعادات والتنظيف واستمرار التوافر عقوداً مستقلة. اختبرها بموائمات مضبوطة، وتجنب مصنعاً يعيد المحاولة إلى الأبد بينما تبدو العملية جاهزة. لا يستطيع المحلل المحلي للإعداد إثبات أي ضمان للشبكة أو لدورة حياة المورد.
أهم ما تعلمته
- تحمل صيغ المزود معنى الهوية والدورة.
- تحقق من الإعداد قبل الجاهزية وأبعد السر عن التشخيص.