ال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 عن عمليات القراءة Query
الـCommand من اسمه هو اي عملية من شأنها أن تغير حالة النظام state سواء على مستوى قاعدة البيانات او على مستوى الذاكرة أي ان هناك معلومة ما في النظام ستتغير. اما الQuery فهي من اسمها مجرد استعلام لا يغير الstate الخاص بالنظام.
قبل الخوض في الHow. الصورة السابقة في اول السلسلة تبين لك كيف من الممكن ان يكون شكل النظام , لديك قاعدة بيانات خاصة بالكتابة فقط تقوم بعمل مزامنة لقاعدة بيانات او اكثر خاصة بالقراءة قد تكون SQL او NoSQL.
احب ان اذكر ان تسريع القراءة من جدول في قاعدة بيانات SQL عن اضافة الIndexes سينعكس سلباً على سرعة الكتابة على نفس الجدول. لكن عند فصل قواعد البيانات يمكنك عمل ماتشاء من Index او الاستغناء عنها تماماً.
في الانظمة بشكل عام تعتبر عمليات القراءة اكثر بعشرات المرات عن عمليات الكتابة , فعند هيكلتنا لنظامنا و تصميمه بهذه الطريقة يمكننا بسهولة عمل scaling لجزئية القراءة فقط كوضع عشرات الclusters للapi أو للdb لخدمة القراءة
و يمكن وقتها اضافة تقنيات الmessaging كـKafka أو RabbitMQ لاستيعاب الكتابة. في السلسلة القادمة سنرى كيفية بناء مثل هذا النظام.
جاري تحميل الاقتراحات...