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

NestJS / المتوسط: السياسات والموائمات والمصادر / الدرس 11

المستودعات والمعاملات وحدود التخزين

ضع الوصول للقاعدة خلف عقود واعية بالمستأجر، وأسند الذرية إلى موضع يفرضها فيه المصدر المختار.

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

أهداف الدرس

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

المستودع موائم له حد سياسة

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

صف قراءة مؤهلة لا بحثاً غير مقيد

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

typescript عقد قدرة تخزين توضيحي
interface CourseRepository {
  visibleCard(input: {tenantId:string; id:string; principal:Principal}): Promise<CourseCard|null>;
  rename(input: {tenantId:string; id:string; expectedRevision:number; title:string}): Promise<RenameOutcome>;
}

تحتاج الأنواع تعريف مجال ولا ينفذ أسلوب ORM أو استعلام أو معاملة.

استخدم اعتماد المعاملة للتغيير المتماسك

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

نمذج رفض النسخة القديمة قبل التغيير

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

javascript شرط نسخة محلي كامل
function rename(record,expected,title) {
  if (record.revision !== expected) throw new Error("REVISION_CONFLICT");
  return {...record,title,revision:record.revision+1};
}
const old={id:"c1",title:"Old",revision:4};
console.assert(rename(old,4,"New").revision === 5);
let conflict=false; try {rename(old,3,"Wrong");} catch {conflict=true;}
console.assert(conflict && old.title === "Old" && old.revision === 4);

ينتج التطابق نسخة خمسة جديدة ويرفض القديم ويحفظ الأصل دون اختبار ذرية التخزين.

قيد عمل المصدر وافصل الإدارة

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

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

يفقد أسلوب مستودع مرشح المستأجر

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

تخرج كتابة من المعاملة المقصودة

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

تعلن المهلة تراجعاً مؤكداً

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

اختبر فهمك

1. لماذا لا تثبت دالة النسخة المحلية سلامة الكتابات المتزامنة؟

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

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

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

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

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

أهم ما تعلمته

  • تحتاج المستودعات المحقونة سياسة وذرية في المصدر.
  • لا تثبت أخطاء النقل النتيجة التخزينية النهائية.

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