تفکیک مسئولیت پرس و جو و دستور (Command Query Responsibility Segregation) یک الگوی معماری است که خواندن و نوشتن را به دو مدل مختلف جدا میکند.
در واقع هر متد یا باید یک دستور باشد که عملی را انجام میدهد یا یک Query که دادهای را برمیگرداند.
یک دستور نمی تواند دادهها را برگرداند و یک Query نمیتواند دادهها یا وضعیت دادهها را تغییر دهد.
از Query فقط میتوان برای خواندن دادهها استفاده کرد در حالی که از دستور میتوان برای تغییر وضعیت دادهها استفاده کرد.
در سمت چپ تصویر بالا، واسط کاربری و کنترلر را داریم؛ که کنترلر، واسط کاربری را کنترل میکند.
در برنامه ممکن است نیاز به خواندن و نوشتن دادهها در پایگاه داده باشد و برای این کار ممکن است چندین متود مثل «getById» ،«getAll» ،«create» ،«update» و «delete» داشته باشیم. متودهای «getAll» و«getById» در دسته query قرار میگیرند و متودهای «create»، «update» و «delete» در دسته دستور قرار میگیرند.
بنابراین با CQRS میتوان پردازش برنامه، خواندن و نوشتن را به دو بخش مختلف تفکیک کرد و حتی میتوان از چندین منبع ذخیره داده در برنامههای مشابه استفاده کرد. با انجام این کار، عملکرد خواندن و نوشتن به شدت بهبود داده میشود.
برای رسیدن به CQRS میتوان از الگوی واسطه استفاده کرد.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
[1] https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs