iOS / Swift / أنظمة ميسرة وأدلة الأهداف / الدرس 17
أوامر الانقطاع والتسوية
نمذج النية المعلقة منفصلة عن الحالة المؤكدة وسوِّ الاكتمال غير المؤكد بهوية عملية مستقرة.
في هذه الصفحة
أهداف الدرس
- يسجل الطابور المحلي النية لا التأكيد
- احفظ هوية عملية مستقرة
- مثّل الاكتمال غير المؤكد بصدق
يسجل الطابور المحلي النية لا التأكيد
يحفظ الأمر دون اتصال ما يريد المستخدم فعله عند غياب الخدمة، ولا يثبت قبولها لاحقا. قد يُحجز المقعد أو تنتهي الصلاحية أو يتغير الحساب قبل التقييم. ميّز الطابور والإرسال والتأكيد والرفض وعدم اليقين. اشرح الانتظار وحدود الإلغاء دون وعد لا يضمنه العميل. الاتصال مؤشر فقط؛ فلا يثبت نشاط الشبكة توافر الوجهة أو تفويضها. دع الرد المعتمد يحدد التأكيد.
احفظ هوية عملية مستقرة
تحتاج كل عملية هوية تبقى عبر الإعادة والبدء. يهزم توليدها كل محاولة عقد تماثل العملية لأن الخادم يرى أوامر مختلفة. يعرّف المقتطف الأول سجل أمر قابلًا للنقل بهوية العملية والحساب والهدف والكمية. يقدم المستدعي المعرّف لينشئه مرة ويحفظه. لا توضع الأسرار في هذا الغلاف التعليمي العادي. وتظل الإصدارات والتحقق والحفظ بحاجة إلى تصميم قبل طابور فعلي.
struct QueuedReservation: Codable, Equatable, Sendable {
let operationID: String
let accountID: String
let workshopID: String
let seats: Int
}
let queued = QueuedReservation(operationID: "op-7", accountID: "lab-user",
workshopID: "w-7", seats: 2)
print(queued.operationID)
op-7
المعرّف المصطنع مدخل مستقر لا مولّد تفرد إنتاجيا. لا ينشأ طابور أو أمر بعيد.
مثّل الاكتمال غير المؤكد بصدق
يثبت الرفض حقيقة تختلف عن فقد الرد بعد الإرسال. فقد يقبل الخادم الأمر دون وصول التأكيد. يميز المقتطف الثاني الانتقالات بدلا من جعل كل فشل نقل رفضا. تقود خسارة التأكيد هنا إلى uncertain التي تحتاج تسوية بالهوية. يحدد عقد تماثل العملية والاستعلام في الخدمة التعافي الآمن. لا يخترع تعداد محلي تسليما مرة واحدة ولا يجبر الخادم على نسيان أمر معتمد.
enum Delivery: Equatable { case queued, sending, confirmed, rejected, uncertain }
enum DeliveryEvent { case begin, accepted, refused, responseLost }
func transition(_ state: Delivery, _ event: DeliveryEvent) -> Delivery {
switch (state, event) {
case (.queued, .begin): return .sending
case (.sending, .accepted): return .confirmed
case (.sending, .refused): return .rejected
case (.sending, .responseLost): return .uncertain
default: return state
}
}
print(transition(.sending, .responseLost) == .uncertain)
true
تحفظ الانتقالات غير المعروفة الحالة في النموذج الصغير. وقد تحتاج واجهة إنتاج إلى إعلان الحدث المعيب صراحة.
حدّد الترتيب والتعارض بمعنى المجال
قد يستقل أمران أو يعتمد أحدهما على الآخر. لا يساوي تعديل عنوان ثم الحذف تنفيذ الحذف ثم إعادة التعديل. حدّد ترتيب السجل والاستبدال والتعارض قبل العاملين المتوازيين. يكشف إصدار خادم أو شرط موثق كتابة قديمة، وتشرح الواجهة الإعادة أو الدمج أو الإسقاط. لا تفرض آخر كتابة لكل المجالات؛ فتعارض تفضيل قراءة وتعارض حجز مختلفان في العاقبة والقواعد.
أظهر حدود الحساب والإلغاء
لا يُرسل أمر حساب تحت حساب آخر لمجرد إعادة البدء أو تغير رمز الدخول. حل الملكية والتفويض قبل الإرسال وحدّد مصير النية الخاصة غير المرسلة عند الخروج. قد يزيل الإلغاء قبل الإرسال النية المحلية، بينما يحتاج بعده إلى أمر تعويضي أو قد يتعذر. لا تمح سجل عدم اليقين لإخفاء الشارة. احفظ هوية آمنة تكفي للتسوية بسياسة حفظ مراجعة.
اختبر فجوات إعادة البدء بنقل مصطنع
استخدم مخزنا ونقلا مزيفين لنمذجة البدء بعد الإدراج وبعد الإرسال قبل التأكيد وبعد الرفض. افحص ثبات الهوية وعدم عبور الحسابات. اختبر الاعتماد والسجل الغائب دون خدمة حية. لا يثبت التسلسل ديمومة الطابور ولا النقل المزيف تماثل الخادم. سجّل القيود. لم يُنفذ طابور دائم أو حجز أو عامل خلفي أو شبكة جهاز أثناء التأليف.
الأخطاء الشائعة وإصلاحها
يُعرض الطابور كتأكيد
- لماذا يحدث؟
- اختلطت النية المحلية بالقبول المعتمد.
- كيف تصلحه؟
- اعرض الانتظار حتى تأكيد الخدمة.
- كيف تتجنب تكراره؟
- اختبر الرفض المتأخر بعد إدراج محلي ناجح.
تنشئ الإعادة معرّفات جديدة
- لماذا يحدث؟
- وُلدت الهوية لكل محاولة لا أمر.
- كيف تصلحه؟
- احفظ هوية الأمر وأعد استخدامها بحسب الخدمة.
- كيف تتجنب تكراره؟
- حاك فقد رد ثم إعادة.
يُعتبر الاكتمال المجهول رفضا مؤكدا
- لماذا يحدث؟
- ألغى غموض النقل احتمال نجاح الخادم.
- كيف تصلحه؟
- مثّل عدم اليقين وسوّه قبل تكرار غير آمن.
- كيف تتجنب تكراره؟
- افصل عينات الرفض وفقد الرد.
اختبر فهمك
1. لماذا لا تكفي هوية مستقرة لضمان تماثل العملية؟
اعرض الحل المشروح
يجب أن تعرّف الخدمة كيفية تعرف المعرّفات ونطاقها وحفظها والرد على تكرارها وتنفذ ذلك. يحفظ العميل الهوية لعمل العقد. وبدون دعم الخدمة لا يمنع النص نفسه تكرار الآثار.
2. ما مصير أمر غير مؤكد عند خروج المستخدم؟
اعرض الحل المشروح
احفظ سجل تسوية آمنا بملكيته الأصلية بحسب السياسة وأبطل النشر في الجلسات الجديدة ولا تعِد إرساله بحساب آخر. اشرح الغموض عند الحاجة. يخفي حذف الدليل أو تسميته مؤكدا غموضا حقيقيا.
أهم ما تعلمته
- يسجل الطابور المحلي النية لا التأكيد
- اختبر فجوات إعادة البدء بنقل مصطنع