إمتى (وليه) ماينفعش تستخدم Event Sourcing؟

إمتى (وليه) ماينفعش تستخدم Event Sourcing؟

الـ Event Sourcing قوي جدًا لما تكون محتاج بجد تتابع تاريخ التغييرات اللي بتحصل على حالة التطبيق. بس ده بيجي معاه تكلفة: تعقيد أكتر، استهلاك مساحة تخزين، وصعوبة في التشغيل. خلّي الـ stack بتاعك بسيط قد ما تقدر—وفكّر مرتين (ولو تلاتة) قبل ما تعتمده.


يعني إيه Event Sourcing أصلاً؟

زي ما Martin Fowler عرّفه:

"الفكرة الأساسية في Event Sourcing هي إن كل تغيير في حالة التطبيق بيتسجّل كـ event object، والأحداث دي بتتخزن بالترتيب طول عمر حالة التطبيق."

لو لسه جديد على المفهوم ده، أنصحك تقرأ المقال الكامل بتاعه عشان تفهم الصورة كاملة. الهدف من البوست ده مش إعادة شرح Event Sourcing، لكن توضيح إمتى ماتستخدمهوش.


هل لازم أتجنّب Event Sourcing خالص؟

مش بالضرورة. الـ Event Sourcing ليه مكانه، لكن هو أعقد من إنك مجرّد تحدّث قيم في التطبيق.

بدل ما تكتب فوق الحالة القديمة، في Event Sourcing لازم:

  1. تحدد كل تغيير بيحصل في التطبيق.
  2. تمثل التغيير ده كـ event معيّن.
  3. تخزن الأحداث دي بالترتيب.
  4. تعيد بناء (“reconstitute”) الحالة الحالية للنظام من تاريخ الأحداث.

وده بيضيف عبء ذهني وتقني كبير. لو مش محتاج audit trail أو إعادة تشغيل للتاريخ، غالبًا الأفضل تبعُده عنه.


هل CQRS معناها لازم أستخدم Event Sourcing؟

لأ. صحيح إن CQRS (Command Query Responsibility Segregation) والـ Event Sourcing بيظهروا كتير مع بعض، بس مش مربوطين ببعض بشكل أساسي. في أُطر عمل بترّبطهم، لكن تقدر تستخدم CQRS من غير Event Sourcing. الاختيار لازم يكون حسب طبيعة المشكلة، مش الموضة.


إمتى Event Sourcing بيبقى مفيد فعلًا

فكّر فيه لو محتاج:

  • تتابع انتقالات الحالة (زي دورة الطلبات، تتبّع الشحن، الموافقات).
  • تبني دومين event-driven (زي المعاملات المالية، الـ workflows).
  • تسجل نشاط المستخدمين (زي تتبع دقيق لحركاتهم على موقع).

إمتى Event Sourcing بيبقى زيادة عن اللزوم

الأفضل تتجنبه في:

  • تحديثات بسيطة زي عربية التسوق.
  • مسودات، عروض أسعار، أو بيانات مؤقتة.
  • سجلات منتجات أو خدمات (إلا لو التتبع التاريخي للأسعار/الإصدارات ضروري جدًا).
  • نموذج إدخال بيانات وحاجات شبه كده اللي عمرها قصير.

الخلاصة

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

👉 استخدمه بس لو حالتك فعلاً محتاجة تاريخ كامل للأحداث—مش عشان شكله جامد أو عشان framework بيدعمه.
👉 قرار واعي من الأول ممكن ينقذ فريقك من شهور من الديون التقنية بعدين.