ایونت سورسینگ روشی متفاوت برای ذخیره داده هاست.
برنامه زیر را در نظر بگیرید که هیچ وابستگی خارجی ندارد و مانند اکثر برنامهها دادهها و وضعیت فعلی را ذخیره می کند.
فرض کنید یک پایگاه داده رابطهای داریم و میخواهیم رکورد جدیدی را وارد کنیم، مثلا امروز 10 عدد از محصول جدیدی را در انبار دریافت کردهایم. پس این رکورد را ایجاد و درج میکنیم.
بعد از مدتی پنج عدد دیگر از آن محصول را وارد انبار میکنیم. بنابراین اتفاقی در سیستم رخ میدهد، و سیستم یک عملیات به روز رسانی را انجام میدهد.
سپس یک سفارش شش عددی از آن کالا را ارسال میکنیم و حالا باید مقدار آن را کاهش دهیم.
اتفاقات دیگری نیز در سیستم رخ میدهد مانند شمارش موجودی انبار، که انباردار موجودی انبار را دوباره محاسبه میکند. فرض کنیم بعد شمارش دوباره موجودی، 50 عدد از این محصول خاص را پیدا کردیم، پس اکنون 59 عدد از آن داریم.
اکثر برنامهها با پیگیری وضعیت فعلی، وضعیت و دادهها را ذخیره میکنند.
تفاوت ایونت سورسینگ این است که به جای وضعیت فعلی، رویدادها را به عنوان حقایق ثبت میکند.
این بدان معنا است که میتوان از رویدادها برای استخراج وضعیت فعلی یا هر نقطه دیگری از زمان استفاده کرد.
در مثال مذکور، رویدادهای زیر را داشتیم:
ذخیره کردن رویدادها اساساً با ذخیره وضعیت فعلی متفاوت است زیرا با وضعیت فعلی نمی دانیم چگونه به تعداد 59 رسیدهایم. اما با ایونت سورسینگ، میتوان با رویدادها به وضعیت فعلی رسید و هیچ دادهای از دست نمیرود.
<رویدادها حقایقی از اتفاقات رخ داده درون سیستم هستند، نه آن چیز که قرار است رخ دهد.>
اکنون ممکن است این سوال برایتان ایجاد شده باشد که تفاوت بین ایونت سورسینگ و لاگ تراکنش (transaction log) چیست؟
لاگ تراکنش انتقال وضعیت را نشان می دهد، و نه دلیل وقوع آن را. برای مثال، در لاگ تراکنش میتوان مشاهده کرد که یک عملیات به روز رسانی برای محصولی خاص وجود دارد که در آن محصول 5 عدد افزایش یافته است، اما نمیتوان فهمید که چرا این اتفاق رخ داده است.
رویدادها علاوه بر اینکه شامل دادههای انتقال حالت، نام و سایر فرادادهها هستند، جزئیات بیشتری را هم در مورد آنچه در سیستم رخ داده ارائه میدهند.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
[1]https://learn.microsoft.com/en-us/azure/architecture/patterns/event-sourcing