CQRS چییست ؟
«نسخه کامل و جامع این مقاله به همراه جزئیات بیشتر، درImaniNova.ir منتشر شده است. در ادامه قطعه ای از این مقاله را مشاهده می کنید.»
عبارت CQRS مخفف Command Query Responsibility Segregation یا همان «تفکیک مسئولیت دستور و پرس وجو» است. هسته ی مرکزی این الگو یک تغییر دیدگاه ساده اما حیاتی است: چرا باید از یک مدل واحد برای «ثبت تغییرات» و «خواندن اطلاعات» استفاده کنیم وقتی نیازهای این دو با هم متفاوت است؟
در معماری های کلاسیک (CRUD)، ما اغلب یک مدل واحد داریم. مثلا برای موجودیت «سفارش»، همان کلاسی که وظیفه محاسبه مالیات، چک کردن موجودی انبار و ذخیره در دیتابیس را دارد (Command)، همان کلاسی است که برای نمایش لیست سفارش ها در پنل مدیریت هم استفاده می شود (Query). این یعنی تداخل مسئولیت ها.
CQRS می گوید این دو را از هم جدا کنید:
- بخش دستورات (Command):
مسئول «نوشتن». تمرکز روی قوانین بیزنس، امنیت و صحت داده ها. - بخش پرس وجو (Query):
مسئول «خواندن». تمرکز روی سرعت، سادگی و فرمت دلخواه UI.
مثال : «دفتر پیشخوان» در برابر «انباری»
برای درک بهتر، سیستم یک فروشگاه بزرگ را تصور کنید:
- سمت Command (انباری و حسابداری): در اینجا همه چیز دقیق است. برای ثبت یک سفارش، باید موجودی انبار چک شود، فاکتور صادر شود و پیامک تایید ارسال گردد. این فرآیند «سنگین» و «حساس» است. شما نمی توانید اجازه دهید هر مشتری کنجکاوی وارد «سیستم حسابداری» شود و با هر کلیک، محاسبات دقیق انبار را به هم بزند.
- سمت Query (ویترین فروشگاه): مشتری فقط می خواهد ببیند آیا کالا موجود است یا خیر. او به «محاسبات انبار» یا «منطق مالیاتی» نیازی ندارد. او فقط یک نمای سریع و ساده می خواهد.
در CQRS، شما دو درگاه دارید:
- وقتی مشتری سفارشی ثبت می کند، به انباری (Command) دستور می دهد.
- وقتی مشتری لیست محصولات را می بیند، از ویترین (Query) استعلام می گیرد. این ویترین، صرفا یک «عکس به روز» از وضعیت انبار است که برای نمایش سریع طراحی شده، نه برای تغییر دادن آن.
- برای مشاهده ادامه مقاله به لینک زیر مراجعه کنید