أي method في البرنامج لا بد أن يقوم بأحد وظيفتين او كلاهما, إما أن يقرأ داتا و إما ان يغيرها و في حالة اخرى ممكن يرسل event (ليس موضوعنا) . الCQS كما ذكرت سابقاً تنص على ان الميثود يجب أن يقوم بعمل واحد فقط إما أن يقرأ دون أن يغير او أن يغير دون أن يقرأ. فماهو الCQRS ؟ (سلسلة) https://t.co/x6IuaTnzHG
الCQRS طريقة في بناء الأنظمة معتمدة على مبدأ الCQS السابق , لكن الCQS يخص الMethods اما الCQRS فتخص الClasses و ممكن تكون على مستوى مشروع برمجي او سيرفرات.
مبدئياً عليك التخلص من التفكير الكرودي :) اقصد الـ CRUD فلا تسمي الميثود باسماء تبدأ بـ insert و update و delete و انما سمها بنفس ما يسميها البزنس , فبدلاً من insertUser سمه registerCustomer هذه الطريقة تسمى Task based بدل من الCRUD based المعروفة.
للاسف ان اغلب الFrameworks تكرس مفهوم الCRUD في بناء الControllers و تقوم بإنشاء مجموعة ميثود بنمط CRUD. نعود للـ Command-Query Responsibility Segregation CQRS
الذي يوصينا بان نقوم بفصل عمليات التعديل Command عن عمليات القراءة Query
الـCommand من اسمه هو اي عملية من شأنها أن تغير حالة النظام state سواء على مستوى قاعدة البيانات او على مستوى الذاكرة أي ان هناك معلومة ما في النظام ستتغير. اما الQuery فهي من اسمها مجرد استعلام لا يغير الstate الخاص بالنظام.