معماریCQRS (Command and Query Responsibility Segregation ) :
در این معماری نرمافزار به دوبخش خواندن( Read Side)و بخش نوشتن (Write Side)تقسیم میشود. اشیاء موجود در بخش خواندن تنها مسئول خواندن و بازیابی اطلاعات از دیتابیس بوده و اشیاء موجود در بخش نوشتن تنها مسئول اجرای Commandهای دریافتی میباشند. در اغلب سیستمهای اطلاعاتی تعداد خواندن اطلاعات از نرمافزار بسیار بیشتر از تعداد نوشتن است.جداسازی این دو بخش شما را قادر میسازد که بر روی هر بخش بهطور مستقل و جداگانه کار کنید و پیادهسازی هر کدام را بنا بر نیاز آن انجام دهید. ( Commandها دستوراتی هستند که چیزی را برنمیگردانند و هدف اصلی آنها درج ویرایش و حذف میباشد اما Queryها دستوراتی هستند که در خروجی خود دیتا است را برمیگرداند و برای گرفتن اطلاعات از دیتابیس استفاده میشود).
معماری CQRS یا بهاصطلاح تفکیک مسئولیتهای نوشتن و خواندن (بر روی دیتابیس) مفهوم تقسیم را در سطح معماری گسترش میدهد، اما این معماری بهعنوان یک معماری کلی برای یک سیستم نرمافزاری تعریف نمیشود.با جدا کردن عملیاتهای خواندن و نوشتن بر روی یک سیستم میتوانیم سرعت عملکرد آن را افزایش دهیم و از اصل تفکیک نگرانیها(Separation of concerns principle) در سیستمهای خود پشتیبانی کنیم.
انواع CQRS :
بهطورکلی میتوان CQRS را درسه سطح دستهبندی کرد :
1- در سطح کد :در این حالت تنها به جداسازی CommandوQuery در سطح کد بسنده میکنیم .
2- در سطح دیتابیس: در این حالت به بهینهسازی دیتابیس( بهخصوص برایQuery ها) میپردازیم و در صورت نیاز دیتابیسCommandوQuery را از هم جدا میکنیم.
3- در سطح کد و دیتا بیس: در این حالت چون CommandوQueryدر سطح کد جداسازی شده، یکی کردن بهینهسازیهای سطح دیتابیس با کد آسانتر خواهد شد.
مزایایCQRS :
Scalability_Performance_Simplicity
اصلی ترین کاربرد CQRS زمانی است که ما با سیستمی مواجه هستیم که بین حجم یا شرایط پردازش اطلاعات در CommandوQuery تناسبی وجود ندارد .
منابع: