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

React Native / ملكية العمل غير المتزامن والبيانات / الدرس 9

النماذج المفكوكة وحدود المستودعات

تحقّق من أشكال القيم وقت التشغيل قبل العرض، وافصل سجلات النقل وقيم المجال المقبولة وبيانات العرض العامة.

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

أهداف الدرس

  • لا يتحقق تصريح النوع من البايتات البعيدة
  • فك البيانات إلى قيمة مقبولة ضيقة
  • اشتق بيانات العرض صراحة من البيانات المقبولة

لا يتحقق تصريح النوع من البايتات البعيدة

قد تنتج شبكة React Native ردا بنجاح بينما تفشل عملية HTTP أو يتغير شكل JSON. قيّم عقد الرد قبل فك جسم النجاح، وتحقّق من القيم وقت التشغيل قبل إنشاء نماذج مقبولة. لا يحوّل تأكيد TypeScript عدد مقاعد نصيا إلى رقم أو يثبت وجود المعرّف. ميّز فشل النقل والحالة غير الناجحة والصياغة المعيبة وحقول المجال غير الصالحة. يخفي إرجاع قائمة فارغة لكل فشل هذه الفروق. وأبق فحوص حداثة الطلب والجلسة بعد الفك؛ فقد يخص سجل صحيح الشكل مالكا متقادما.

فك البيانات إلى قيمة مقبولة ضيقة

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

javascript نموذج JavaScript مستقل بمدخلات محلية مصطنعة.
function decodeWorkshop(raw) {
  if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new Error('INVALID_RECORD');
  if (typeof raw.id !== 'string' || raw.id.trim() === '') throw new Error('INVALID_ID');
  if (!Number.isSafeInteger(raw.seats) || raw.seats < 0) throw new Error('INVALID_SEATS');
  return {id: raw.id, seats: raw.seats};
}
console.log(JSON.stringify(decodeWorkshop({id: 'w-7', seats: 3, extra: 'ignored'})));
try { decodeWorkshop({id: 'w-8', seats: '3'}); }
catch (error) { console.log(error.message); }
الناتج المتوقع
{"id":"w-7","seats":3}
INVALID_SEATS

تحوي النتيجة مقاعد عددية وشكلا ضيقا جديدا. ولا يُختبر عنوان JSON أو تشغيل شبكة أصلي.

اشتق بيانات العرض صراحة من البيانات المقبولة

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

javascript نموذج JavaScript مستقل بمدخلات محلية مصطنعة.
function cardFromAccepted(record) {
  return {id: record.id, label: 'Seats: ' + record.seats};
}
const accepted = {id: 'w-7', seats: 3, internalNote: 'synthetic only'};
const card = cardFromAccepted(accepted);
console.log(JSON.stringify(card));
console.log(Object.hasOwn(card, 'internalNote'));
console.log(accepted.internalNote);
الناتج المتوقع
{"id":"w-7","label":"Seats: 3"}
false
synthetic only

يحذف الاشتقاق الملاحظة ويحفظ المصدر دون تغيير. يوضح حد قيم، ولا يعتمد خصوصية التطبيق.

يملك المستودع سياسة المصادر لا الشاشة

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

افحص الشكل والمعنى والعرض كلّا على حدة

استخدم عينات صغيرة لـ null والمصفوفات والحقول المفقودة والأنواع الخاطئة والكميات السالبة والأعداد غير الآمنة والصفر الصحيح والحقول المجهولة. أكّد فئات فشل مستقرة لا استثناء وصول خاصية عرضيا. اختبر تفرد المجموعة وسياسة الرد الجزئي مستقلة. ثم اعرض نماذج مقبولة مسبقا داخل بيئة مكونات مجهزة حتى لا تختلط العيوب المرئية بفك النقل. تثبت اختبارات Node النقية سلوك المفكك والاشتقاق فقط. ولا تتحقق من نقل fetch أو سياسة TLS الأصلية أو تكامل الإطار أو تخطيط Text الفعلي؛ فلا تتصل النماذج بخدمة بعيدة.

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

وصول كمية نصية للحساب كأنها رقم

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

تسرب حقل نقل إضافي إلى بطاقة عامة

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

إنتاج سجلين صحيحين منفردين مفاتيح مكررة

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

اختبر فهمك

1. هل ينبغي تطبيع seats المفقودة إلى صفر بصمت؟

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

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

2. هل يثبت استبعاد internalNote من بطاقة أن العميل لم يتلق بيانات خاصة؟

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

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

أهم ما تعلمته

  • لا يتحقق تصريح النوع من البايتات البعيدة
  • افحص الشكل والمعنى والعرض كلّا على حدة

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