در بانک، وقتی پولی جابهجا میشود، صندوقدار بقیه شعب را زنگ نمیزند. یک برگه «این اتفاق افتاد» در سینی اخبار میگذارد. شعبه وام، شعبه تقلب، شعبه پیامک — هرکدام اگر خواستند برمیدارند و کار خودشان را میکنند، بدون اینکه صندوقدار منتظرشان بماند. به این خبر Event میگویند.
معماریای که روی همین خبرها میچرخد Event-driven است — کوتاهشدهاش EDA. سرویسها بهجای صدازدن مستقیم هم، واقعیت رخداده را منتشر میکنند: OrderPlaced، PaymentFailed. مصرفکنندهها مستقل واکنش نشان میدهند. اتصال سست میشود؛ توسعه آزادتر.

خبر در برابر دستور
اگر این دو را قاطی کنی، یا سرویسی میسازی که باید بداند چه کسی گوش میدهد، یا فرمانی میفرستی که هیچکس مسئول انجامش نیست.
CQRS: دو مدل برای دو کار
آشپزخانه بلیت پخت مینویسد — قواعد و تراکنش. تابلوی سالن چیز دیگری نشان میدهد: غذاهای آماده، زمان انتظار. این دو شکل یکی نیستند. CQRS شغلش جدا کردن مدل نوشتن از مدل خواندن است. Event ها نمای خواندنی را بهروز میکنند.
جایی میارزد که شکل خواندن و نوشتن خیلی فرق دارد — فید، گزارش، جستجو. بها: پیچیدگی، و سازگاری نهایی بین دو مدل. برای یک CRUD ساده نخرش.
Event Sourcing: خودِ برگهها حقیقتاند
بهجای ذخیره «موجودی فعلی»، همه Event ها را Append-only نگه میداری. وضعیت = بازپخش برگهها — با Snapshot برای اینکه هر بار از روز اول نخوانی. حسابرسی کامل، بازسازی هر لحظه از گذشته، دیباگ رؤیایی. بها: پیچیدگی جدی و مهاجرت schema سخت.
جای درستش جایی است که «چطور به اینجا رسیدیم» خودِ داده است: دفتر کل مالی، انبارداری، ویرایشگر مشترک. وبلاگ شخصی این قیمت را نمیارزد.
به زبان ساده
Event میگوید چه شد؛ بقیه مستقل واکنش میدهند. Outbox اتمیاش میکند. CQRS خواندن را از نوشتن جدا میکند. Event Sourcing خودِ تاریخچه را حقیقت میداند.
مثال واقعی
صندوقدار بانک بقیه را زنگ نمیزند؛ برگه «این اتفاق افتاد» را در سینی میگذارد. هرکس کار خودش را میکند.