React Native / ملكية العمل غير المتزامن والبيانات / الدرس 11
المسودات ذات الإصدار ومهايئات التخزين
حدّد ضمان التخزين المحلي، وميّز ترميز المسودة وقبول الكتابة والمزامنة المعتمدة.
في هذه الصفحة
أهداف الدرس
- تحتاج أنواع السجلات إلى ضمانات تخزين مختلفة
- اقرأ غلافا ذا إصدار عند حد واحد
- استخدم بديلا قابلا للفشل لكشف سياسة القبول
تحتاج أنواع السجلات إلى ضمانات تخزين مختلفة
تختلف أعمار مخزن رد قابل للإعادة ومسودة غير مرسلة وبيانات اعتماد ومعاملة مؤكدة، وتختلف عواقب فقدها. حدّد الملكية والحساسية وإصدار المخطط والحفظ والتعافي قبل اختيار المهايئ. لا تقدم نواة React Native واجهة AsyncStorage المحذوفة؛ ولتكامل المجتمع أو المنصة المختار تثبيته وتوافقه وضماناته. لا تُثبت حزمة تخزين هنا. لا تعتبر مخزن نصوص تفضيلات تخزينا محميا للاعتماد أو قاعدة معاملات. كما لا يثبت نجاح كتابة محلية قبول خادم معتمد لحجز.
اقرأ غلافا ذا إصدار عند حد واحد
يقبل البرنامج الأول غلاف مسودة صغيرا بالمخطط1 ويرفض إصدارا غير مدعوم أو عنوانا معيبا. يتيح الإصدار للشيفرة المقبلة اختيار ترحيل أو تعاف بدلا من تفسير حقول متغيرة بافتراض قديم. ينتج ترميز JSON نصا فقط؛ ولا يثبت حفظ القرص أو التشفير أو الاسترداد بعد البدء. وللمسودات المهمة قد لا يُقبل الحذف الصامت لغير المتوافق. احفظ فئة الفشل وقرّر الترحيل أو التصدير أو العزل أو طلب التعافي من المالك الحالي. يحفظ الترحيل المعنى ويفحص ناتجه، لا يسكت استثناء فحسب.
function readDraft(source) {
const raw = JSON.parse(source);
if (!raw || typeof raw !== 'object' || Array.isArray(raw)
|| raw.schema !== 1 || typeof raw.title !== 'string') {
throw new Error('UNSUPPORTED_DRAFT');
}
return {title: raw.title};
}
const encoded = JSON.stringify({schema: 1, title: 'Maps'});
console.log(readDraft(encoded).title);
try { readDraft('{"schema":2,"title":"Maps"}'); }
catch (error) { console.log(error.message); }
Maps
UNSUPPORTED_DRAFT
يُختبر التسلسل المحلي فقط. ولا يعني المخطط المدعوم وحده أن العنوان اجتاز قاعدة تحقق أمر الحفظ المستقلة.
استخدم بديلا قابلا للفشل لكشف سياسة القبول
يحفظ البرنامج الثاني القيمة المحلية السابقة عندما يرفض المهايئ المصطنع استبدالها. يوضح عقد مهايئ واحد وقرار المستدعي عدم إعلان القبول بعد رفض الوعد. تختلف منتجات التخزين الفعلية في الذرية والدفعات والديمومة والتعافي؛ ولا يمنحها البديل سلوكه. احقن المهايئ في مستودع لمحاكاة الفشل دون مخزن جهاز. وأبق نص المسودة المهم متاحا حتى يؤكد حد التخزين المختار العملية الموعودة أو تسقطه سياسة إلغاء مقصودة.
class MemoryDraftStore {
constructor() { this.value = null; this.rejectWrites = false; }
async write(value) {
if (this.rejectWrites) throw new Error('WRITE_REJECTED');
this.value = value;
}
async read() { return this.value; }
}
async function demo() {
const store = new MemoryDraftStore();
await store.write('Maps');
store.rejectWrites = true;
try { await store.write('Rivers'); }
catch (error) { console.log(error.message); }
console.log(await store.read());
}
demo().catch(error => { console.error(error.message); process.exitCode = 1; });
WRITE_REJECTED
Maps
لا يفتح بديل الذاكرة ملفا أو مخزنا أصليا. ويفحص سلوك الفشل الظاهر للمستدعي ضمن عقده المحلي المعلن فقط.
افصل حداثة المخزن من توافره وملكيته
قد تبقى البيانات المخزنة متاحة وهي قديمة. احفظ بيانات وصفية آمنة تكفي لشرح ذلك، واختر بقاء المحتوى السابق مرئيا أثناء التحديث. لا يثبت وقت محلي حقيقة الخادم. حدّد نطاق المخازن الخاصة والمسودات غير المرسلة بالحساب المقصود، حتى لا ينشر الخروج محتوى قديما في جلسة جديدة. يحتاج طابور كتابة دون اتصال إلى هوية عملية مستقرة وقواعد تعارض وتسوية للاكتمال غير المؤكد؛ فالإدراج ليس تأكيد عمل. اتصال الجهاز مؤشر توافر شبكة فقط، ولا يثبت بلوغ الوجهة أو التفويض. حدّد سياسات المصادر في المستودع.
افحص التعافي لا التحويل الناجح وحده
اختبر JSON المعيب والمخططات القديمة وغير المدعومة والعنوان المفقود وفشل القراءة ورفض الكتابة وإعادة البدء بين تسجيل النية والتأكيد. احفظ عينات ترحيل من الصيغ السابقة المدعومة. يثبت بديل الذاكرة انتقالات السياسة، لا ديمومة القرص أو التخزين المحمي أو إنهاء العملية أو تسجيل الإضافة الأصلية. نفذ تلك الحدود في بيئة الهدف المصرح بها فقط، وأبلغ عنها مستقلة. لا تشغّل الدورة حزمة تخزين حقيقية أو قاعدة أو مخزن اعتماد أو جهازا أو خدمة مزامنة؛ وتبقى برامجها نماذج محلية صغيرة.
الأخطاء الشائعة وإصلاحها
الإبلاغ عن JSON مرمز كحفظ دائم
- لماذا يحدث؟
- اختلط التسلسل باكتمال التخزين والتعافي.
- كيف تصلحه؟
- سم حد الكتابة الفعلي وضماناته الموثقة.
- كيف تتجنب تكراره؟
- اختبر الترميز مستقلا عن الحفظ بعد إعادة البدء.
حذف تحديث التطبيق مسودات غير متوافقة بصمت
- لماذا يحدث؟
- لم توجد سياسة تعاف ذات إصدار.
- كيف تصلحه؟
- احفظ البيانات واختر الترحيل أو التعافي عمدا.
- كيف تتجنب تكراره؟
- احفظ عينات مصطنعة للصيغ السابقة.
ظهور بيانات حساب قديم بعد الخروج
- لماذا يحدث؟
- افتقدت المفاتيح ونشر النتائج نطاق الحساب.
- كيف تصلحه؟
- أبطل الخاص بقواعد ملكية الجلسة.
- كيف تتجنب تكراره؟
- بدّل الحساب أثناء قراءة تخزين معلقة.
اختبر فهمك
1. ماذا يثبت MemoryDraftStore عن ذرية التخزين الأصلي؟
اعرض الحل المشروح
لا يثبت شيئا عن تنفيذ أصلي. يحدد مهايئا مصطنعا ويختبر عقدا يترك القيمة السابقة دون تغيير عند رفض الكتابة. يجب تقييم منتج التخزين المختار وفقا لعقده الموثق ودليل الهدف الخاص به؛ والبديل أداة مضبوطة لاختبار سياسة المستدعي.
2. هل ينبغي عرض حجز في طابور دون اتصال على أنه مؤكد؟
اعرض الحل المشروح
لا. يحفظ الطابور النية إلى أن يجري التقييم المعتمد. قد يتغير التوافر أو الإذن قبل التسليم، وقد يحتاج الرد المفقود إلى تسوية. اعرض حالة انتظار بحدود إلغاء واضحة، واحفظ معرّف عملية مستقرا وفقا لعقد الخدمة.
أهم ما تعلمته
- تحتاج أنواع السجلات إلى ضمانات تخزين مختلفة
- افحص التعافي لا التحويل الناجح وحده