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

React Native / أنظمة أصلية شاملة وأدلة الإصدار / الدرس 17

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

افصل النية المحفوظة محليا من حالة العمل المؤكدة، واحفظ هوية مستقرة عبر الإعادة وتغير الحساب.

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

أهداف الدرس

  • يحفظ الطابور المحلي النية ولا يثبت القبول
  • احفظ هوية عملية واحدة عبر المحاولات
  • ينشئ فقد الرد عدم يقين، وليس رفضا مؤكدا

يحفظ الطابور المحلي النية ولا يثبت القبول

يمكن للفعل دون اتصال تسجيل ما يريده المستخدم أثناء غياب الخدمة، لكنه لا يَعِد بقبولها لاحقا. وقد تتغير السعة والصلاحية وملكية الحساب وإصدار السجل قبل التسليم. أظهر حالات الطابور والإرسال والتأكيد والرفض وعدم اليقين بصورة متميزة. لا يثبت اتصال الجهاز إمكان بلوغ الوجهة أو نجاح التفويض. حدّد العمليات المسموحة دون اتصال وما يمكن إلغاؤه قبل الإرسال وبعده. قد يطلق تفعيل AppState تسوية للحالة بمالك واضح، لكنه لا يعيد آخر أمر مؤثر عميانا.

احفظ هوية عملية واحدة عبر المحاولات

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

javascript نموذج JavaScript مستقل بمدخلات محلية مصطنعة.
function command(operationId, accountId, workshopId, seats) {
  if (![operationId, accountId, workshopId].every(value => typeof value === 'string' && value !== '')
      || !Number.isSafeInteger(seats) || seats < 1) throw new Error('INVALID_COMMAND');
  return Object.freeze({operationId, accountId, workshopId, seats});
}
const queued = command('op-7', 'lab-user', 'w-7', 2);
const retryPayload = {...queued};
console.log(retryPayload.operationId);
console.log(retryPayload.accountId);
console.log(Object.isFrozen(queued));
الناتج المتوقع
op-7
lab-user
true

تحفظ نسخة الإعادة هوية الأمر والحساب الأصليتين. والتجميد سطحي؛ ولا يحوي الغلاف إلا حقولا أولية.

ينشئ فقد الرد عدم يقين، وليس رفضا مؤكدا

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

javascript نموذج JavaScript مستقل بمدخلات محلية مصطنعة.
function transition(state, event) {
  if (state === 'queued' && event === 'send') return 'sending';
  if (state === 'sending' && event === 'accepted') return 'confirmed';
  if (state === 'sending' && event === 'refused') return 'rejected';
  if (state === 'sending' && event === 'response-lost') return 'uncertain';
  return state;
}
console.log(transition('sending', 'response-lost'));
console.log(transition('sending', 'accepted'));
console.log(transition('uncertain', 'accepted'));
الناتج المتوقع
uncertain
confirmed
uncertain

لا تؤكد العملية غير المؤكدة بانتقال غير مدعوم. وتحتاج نتيجة التسوية الفعلية حدثا مصمما وسياسة خدمة صريحين.

يعتمد الترتيب والإلغاء على معنى المجال

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

اختبر فجوات إعادة البدء والملكية ببدائل مضبوطة

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

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

عرض النية المدرجة كأنها مؤكدة

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

حصول كل إعادة على هوية عملية جديدة

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

إرسال الخروج نية قديمة باسم المستخدم التالي

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

اختبر فهمك

1. هل يضمن ثبات operationId وحده عدم تكرار أثر الأمر عند إعادة إرساله؟

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

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

2. لماذا لا ينبغي حذف سجل غير مؤكد لمجرد محو شارة؟

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

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

أهم ما تعلمته

  • يحفظ الطابور المحلي النية ولا يثبت القبول
  • اختبر فجوات إعادة البدء والملكية ببدائل مضبوطة

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