راستش یکی از موضوعاتی که اخیرا درگیرم کرده بود همین event sourcing بود. که میخواستم بدونم دقیقا چی هست و چجوری پیاده سازی میشه و اصلا خود مفهوم (concept) چیه . حالا که یکم دانش بهتری نسبت به این قضیه پیدا کردم دوست داشتم با همه به اشتراک بگذارم .
مارتین فاولر(Martin Fowler) میگه :
Capture all changes to an application state as a sequence of events.
کل event sourcing رو میشه در همین جمله خلاصه کرد ، حالا بریم که با هم ببینیم معنی و مفهوم همین یه جمله یعنی چی و میخواد چجوری توی اپلیکیشن ما نمود پیدا کنه؟
ترجمه عبارت بالارو بهتره اینجوری بگیم که هدف از ایونت سورسینگ اینه که رفتار نرم افزار رو با وضعیت های مختلف ثبت کرد و به عبارت دیگه یعنی تمامی اطلاعتی که نرم افزار با رویداد های مختلف براش پیش میاد رو نگهداری کنیم و هر زمان که رویداد جدیدی اتفاق میفته باید اون رو به انتهای لیست تغییرات در طول زمانمون اضافه کنیم، باید بتونید تشخیص بدید که دقیقا در چه مرحله ای رفتار و عملکرد نرم افزار (یا همون اپلیکیشن) اشتباه و غیر قابل انتظار بوده. ایونت سورسینگ فواید زیادی داره که از جمله مهمترینش میشه به دیباگ کردن منطقی پروژه و کنترل کیفی و رفتاری پروژه اشاره کرد.
به عنوان مثال، در سیستم های حسابداری که به طور مستقیم با حساب های شرکت و میزان بدهکاری و بستانکاری ارتباط دارن، پیاده سازی همچین مکانیسمی برای درست محاسبه کردن مقادیر مالی و کشف کسورات پولی در انتهای محاسبات و گزارشات بشدت حائز اهمیت هست. همچنین وقتی شما یک ورژن جدید از پروژه رو ارائه میکنید و طبیعتا انتظار دارید که در بعضی جاهاش که تغییرش دادید، این تغییرات رو در رفتار پروژه هم ببینید که با ایونت سورسینگ و مقایسه با دیتای ضبط شده سابق میشه به این مهم دست یافت.
نرم افزار ها لیست رویداد ها رو در یک مخزن رویدادها (event store) نگهداری میکنند که در واقع این مخزن رو یک پایگاه داده از رویداد های مختلف سیستممون هست (database of events) این پایگاه داده API و یا رابط نرم افزاری دارد که از طریق اون به ثبت و دریافت رویداد های مختلف یک قسمت از نرم افزار یا بیزینسمون میپردازیم .
و این پایگاه داده در واقع همانند یک واسط پیام (Message Broker) عمل میکنه که API دیگری رو هم برای سرویس های دیگه آماده میکنه که به این ایونت خاص وصل بشن و هر وقت تغییر یا رویدادی در سیستم برای این قسمت اتفاق افتاد اون ها هم از این رویداد مطلع بشن و کار های خودشون رو بکنن.
خوب شاید بهتر باشه با مطرح کردن یک مثال ایونت سورسینگ رو بهتر بفهمیم و اون رو بهتر درکش کنیم
سیستمی رو در نظر بگیرید که شامل دو سرویس Customer , Order باشه ما میخوایم که ایونت سورسینگ رو در این سیستم پیاده سازی کنیم
در این تصویر به راحتی میشه فهمید که ایونت سورسینگ دقیقا چی کار میخواد بکنه در این سیستم ما به جای این که برای هر وضعیت سفارش بیایم و یک سطر از دیتابیسمون رو آپدیت کنیم وضعیت های مختلف رو در یک event store ذخیره میکنیم و این طوری پس از هر تغییر وضعیت سرویس مشتری یا customer هم از وضعیت سفارش اون مشتری مطلع میشه و میتونه کار های خودشو نسبت به هر تغییر وضعیت سفارش جلو ببره
امیدوارم دقیقا متوجه شده باشین که ایونت سورسینگ دقیقا میخواد چیکار بکنه
بد نیست با هم مزایا و معایب این سیستم رو هم ببینیم
مطابق با هر سیستمی ایونت سورسینگ هم معایب خودشو داره
خلاصه از نگاه یک مدیر فنی یا یک مالک محصول، و یا از نگاه یک برنامه نویسی که نگاه وسیعی داره، استفاده از ایونت سورسینگ کیفیت و دقت پروژه رو خیلی ارتقاء میده و ضریب خطا و از دست داده دیتا رو به حداقل میرسونه. شایان ذکره که با استفاده از ایونت سورسینگ event sourcing بعد از یک مدتی میشه یک سری نمودارها و چارت های تحلیلی هم از رفتار و عملکرد بخش های مختلف پروژه ترسیم کرد که در یک نگاه مختصر دیتا و اطلاعات زیادی رو به ما میده و میتونه توی تصمیم گیریها و اولیت بندی توسعه محصول بهمون کمک کنه.