مقالات

تطبيق يعمل بلا اتصال

ما معنى العمل دون اتصال في مخزن أو شاحنة: يُحفظ السجل على الهاتف أولًا، وثلاث حالات تُظهرها كل شاشة، والتعارضات التي لا تظهر إلا متأخرة.

بقلم أنس حمداوي5 دقائق قراءة
  • mobile
  • offline
  • operations
كل المقالات

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

ما معنى «العمل دون اتصال» عمليًا؟

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

ويحتاج السجل رقمًا يُنشأ على الهاتف، لا رقمًا يعيده الخادم بعد وصوله. إن انتظرت الرقم من الخادم، فأي هاتفين يعملان دون اتصال ينتجان سجلين بالرقم المؤقت نفسه، ثم يمحو أحدهما الآخر في المزامنة.

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

ماذا يجب أن تُظهر كل شاشة؟

واحدة من ثلاث حالات، ظاهرة دائمًا: محفوظ هنا في انتظار الإرسال، أو أُرسل وأكده الخادم، أو رُفض مع سبب. والشاشة التي لا تُظهر أيًّا منها تكذب بما تسكت عنه.

الحالة ما يراه المستخدم معناها
محفوظ هنا علامة انتظار وعدّاد كُتب على الهاتف ولم يُرسل
مُرسل مرجع الخادم ووقت الاستلام قُبل على الخادم
مرفوض السبب بالكلمات رفضه الخادم، ويبقى السجل للتصحيح

الحالة الثالثة هي التي تُنسى. الرفض ليس نافذة خطأ تختفي: يبقى السجل على الجهاز موسومًا، ويصححه أحدهم في اليوم نفسه. وإلا تعلّم الفريق أن التطبيق «لا يعمل» وأن الورق أصدق منه.

وليكن العدّاد على الشاشة الأولى لهاتف المشرف: «12 في الانتظار». هذا الرقم وحده هو الذي يخبره هل خرج عمل اليوم من الهواتف أم ما زال فيها.

واللون وحده ليس رسالة؛ من يستعمل قارئ الشاشة لا يرى النقطة الخضراء. لذلك يُعلن تغيّر الحالة نصًّا، وهذا ما تغطيه معايير WCAG 2.2 في معيار رسائل الحالة.

أي تعارضات لا تظهر إلا متأخرة؟

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

وأربع قواعد تصمد أمام ذلك:

  • أرسل الحركة لا الرصيد. «زائد 3» و«ناقص 1» يجتمعان على الخادم؛ أما «الرصيد 40» فيمحو ما قبله.
  • أبقِ النسختين حين لا مفر من المحو. ملاحظتان على الطلب نفسه أفضل من ملاحظة صحيحة ضاعت، والقرار يعود إلى إنسان يرى الفرق.
  • لا تثق بساعة الهاتف. ساعة الجهاز قد تخطئ ساعات أو سنوات؛ رتّب على وقت وصول الخادم، واحفظ وقت الجهاز كقرينة لا كحكم.
  • اجعل التعارض صاخبًا. التعارض الذي يُحلّ بصمت أسوأ من الرفض، لأن الحقل يبدو صحيحًا وهو خطأ.

وليكن الهاتف صريحًا في عمر بياناته: «حتى الثلاثاء 14:20» على الشاشة، فيشكّ الموظف قبل أن يحفظ.

ما الذي لا يجوز أن يعمل دون اتصال؟

ثلاثة أشياء: سعر يقرره الخادم، ودفعة مالية، وفحص صلاحية.

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

والدفعة دون اتصال وعد لا يستطيع التطبيق الوفاء به؛ جواب المزوّد هو الدليل الوحيد. ضع النية في الطابور، وعلّم العملية «غير مدفوعة» حتى يصل الجواب.

والصلاحية قرار يُتخذ على الجهاز يعطي سلطة لمن يحمل الهاتف: جهاز مسروق فيه نسخة قديمة من قائمة الموظفين يستطيع قبول مرتجع. افحص الإذن حيث توجد البيانات، على الخادم، واحفظ الجواب للجلسة الحالية فقط.

ولا يعني هذا أن تُغلق تلك الشاشات، بل أن تكون صادقة: الزر يقول «يحتاج اتصالًا» بدل أن يتظاهر بأنه يعمل.

ما الذي يجب أن تقبله إدارة العمل؟

طابور ظاهر، ومزامنة يراقبها إنسان، كقاعدة تشغيل لا كميزة في التطبيق.

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

بأي ترتيب تبني هذا؟

  1. اسرد السجلات التي يُنشئها الميدان، وحدد أيها يجب أن يؤكده الخادم قبل أن يكمل العمل.
  2. اختر الهوية: أرقام تُنشأ على الجهاز، ولا تُطلب من الخادم بعد الكتابة.
  3. قرّر صاحب الحقيقة في كل حقل — الهاتف أو الخادم أو قابل للدمج — واكتبه في جدول يوقعه صاحب العملية.
  4. ابنِ الحالات الثلاث في الشاشة التي يُنشأ فيها السجل، ثم في كل قائمة تعرضه.
  5. ضع عدّاد الطابور ووقت آخر مزامنة على الشاشة الأولى لهاتف المشرف.
  6. اختبره كما يفشل: وضع الطيران ليوم عمل، وهاتفان على السجل نفسه، وهاتف ساعته خاطئة، ورفض في منتصف دفعة.
  7. اكتب خطة الورق، وجرّبها مرة واحدة مع من سيستعملها.

أين يخطئ هذا

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

ما لا يغطيه هذا المقال

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

نبني تطبيقات تظل تعمل في مخزن بلا شبكة، وتُظهر الطابور بصدق يكفي ليتصرف عليه إنسان.

خدمات في هذا المقال

ابدأ مشروعًا

لديك شيء تريد بناءه؟

ملخص قصير يكفي. تحصل على نطاق مكتوب وسعر ثابت قبل أن يبدأ أي شيء.