تقنية

سجل الأحداث والحالة الحالية: أيهما تحتاج بيانات النموذج؟

مسار حجز ثم إلغاء ثم حجز ومسار حجز مباشر ينتهيان بالحالة نفسها محجوز
رسم أصلي يوضح الفرق بين تاريخ التغير والنتيجة الحالية.

سجل الأحداث والحالة الحالية يجيبان عن سؤالين مختلفين: ماذا حدث، وما الوضع الآن؟ يشرح نمط Event Sourcing حفظ تسلسل التغييرات، مقابل تحديث الحالة الأحدث، مع إمكان استخراج الحالة من الأحداث. [1]

الخلاصة السريعة

اختر حسب السؤال: الحالة تصف الوضع المحدد الآن، والتاريخ يبين التغييرات المسجلة قبله. افحص ما يحفظه النظام فعلا، فقد توجد آلية تاريخ منفصلة بجانب جدول الحالة.

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

ماذا يصف كل تمثيل؟

في نمط حفظ الأحداث، تسجل التغييرات بتتابع يمكن استخدامه لاستخراج الحالة. أما تحديث آخر حالة وحده فقد يفقد تاريخ التغيير إن لم توجد آلية تدقيق أخرى. وتذكر Microsoft أن تبني هذا النمط له تعقيدات ومقايضات. [1]

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

كيف تنتهي مسارات مختلفة بالحالة نفسها؟

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

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

ما أثر ذلك عند إعداد بيانات النموذج؟

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

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

ما الذي نتحقق منه قبل الاختيار؟

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

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

المصادر ومتابعة القراءة

  1. Microsoft: Event Sourcing pattern (يفتح في نافذة جديدة)learn.microsoft.com

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