🧩 5️⃣ CQRS (Command Query Responsibility Segregation)(بخش پنجم)
الگوی CQRS یک الگوی طراحی است که عملیات خواندن (Query) را از عملیات نوشتن (Command) جدا میکند 🔀.
در این الگو، برای هرکدام مدل جداگانهای استفاده میشود:
📝 مدل نوشتن (Write Model): مسئول منطق کسبوکار و تغییر دادهها
📊 مدل خواندن (Read Model): بهینهشده برای خواندن، جستجو و گزارشگیری
⚙️ نحوهی کار (How it works)
✏️ ءCommandها نمایانگر عملیاتی هستند که وضعیت سیستم را تغییر میدهند و از طریق مدل نوشتن پردازش میشوند
🧠 مدل نوشتن قوانین کسبوکار را اعمال میکند، دادهها را اعتبارسنجی میکند و تغییرات را در پایگاهداده ذخیره میکند
🔍 ءQueryها داده را از طریق مدل خواندن بازیابی میکنند، بدون اینکه تغییری در وضعیت سیستم ایجاد شود
🗄 مدل خواندن معمولاً یک دیتابیس یا ساختار دادهی جداگانه است که برای عملکرد بهتر در Query بهینه شده
🔄 تغییراتی که در مدل نوشتن ایجاد میشوند، معمولاً بهصورت asynchronous و اغلب از طریق eventها به مدل خواندن منتقل میشوند
✅ مزایا (Benefits)
🚀 امکان بهینهسازی مستقل مدلهای خواندن و نوشتن بر اساس نیازهای عملکردی هرکدام
📈 قابلیت مقیاسپذیری جداگانهی عملیات خواندن و نوشتن، متناسب با الگوی مصرف واقعی
🧩 سادهتر شدن دامنههای پیچیده با جدا کردن منطق اعتبارسنجی Command از منطق Query
⚠️ معایب (Drawbacks)
⏳ ایجاد eventual consistency بین مدل نوشتن و مدل خواندن
🏗 افزایش پیچیدگی سیستم به دلیل وجود چندین مدل و مکانیزم همگامسازی
🔧 نیاز به زیرساخت اضافه برای همگام نگه داشتن مدلهای خواندن و نوشتن
🎯 موارد استفاده (Use cases)
🖥 اپلیکیشنهایی با بار خواندن و نوشتن بسیار متفاوت که نیاز به مقیاسپذیری مستقل دارند
🧠 دامنههای پیچیده که منطق کسبوکار در عملیات نوشتن تفاوت زیادی با نیازهای گزارشگیری دارد
📊 سیستمهایی با نسبت Read به Write بالا که عملکرد Query در آنها حیاتی است