CQRS and Mediator pattern

SAMI
December 1, 2024 1 min to read
Share

المقدمة

في المقال هذا، بش نحكيو على CQRS وMediator Pattern، شنو العلاقة بينهم وعلاش نستعملوهم.

CQRS هو Architectural Pattern يستعمل باش نفصل عمليات القراءة (Read) على عمليات الكتابة (Write). الاسم اختصار لـ Command and Query Responsibility Segregation.

والمصطلح Segregation يعني الفصل بين المسؤوليات، يعني في الحالة هذي، الـ CQRS يفصل بين قراءة البيانات وكتابتها. خلينا نفسرو الموضوع بالتفصيل.


علاش نستعملو CQRS؟

نسألوا روحنا: علاش نحبوا نفصلوا عمليات القراءة على الكتابة؟ علاش اخترعولنا الـ CQRS؟

كيف ما تعرف، أي Pattern يجي باش يحل مشكلة معروفة واجهناها برشا مرات. والمشكلة في أغلب التطبيقات الكبيرة هي كثرة عمليات القراءة والكتابة. وقت عدد المستخدمين يزيد، المشاكل تبدأ تظهر في:

1. الأداء (Performance):

  • عمليات القراءة عندها خصائص مختلفة على عمليات الكتابة، وكل واحدة تتطلب موارد خاصة باش تكون بأفضل أداء.
  • كيفاش توفّق بين الاثنين في نفس النموذج؟ النتيجة تكون استعمال غير فعال للموارد، أو توزيع الموارد بطريقة غير منظمة.

2. قابلية التوسع (Scalability):

  • في التطبيقات، تلقى جزء كبير من النظام يعالج عمليات القراءة، وجزء آخر يعالج الكتابة.
  • باش توسّع التطبيق وتعطي كفاءة للنوعين من العمليات، العملية تولي مكلفة وغير فعالة.

متطلبات الموارد المختلفة بين القراءة والكتابة

  • عمليات القراءة (Reads): أقل استهلاكًا للموارد. غالبًا يتم استرجاع البيانات من الكاش أو نسخة مكررة، مما يخليها سريعة وسهلة التوزيع. التوسع سهل عن طريق إضافة نسخ إضافية للبيانات.
  • عمليات الكتابة (Writes): تتطلب موارد أكبر. البيانات تتسجل في التخزين، مع تنسيق كبير وتأخير، خاصة في الأنظمة الموزعة. الكتابة تتطلب تحديث الفهارس وتعامل مع سجلات المعاملات، مما يجعل التوسع أكثر تكلفة وصعوبة.

الحل: CQRS Pattern

CQRS هو نمط يفصل بين:

  • الاستعلامات (Queries): العمليات اللي تسترجع البيانات.
  • الأوامر (Commands): العمليات اللي تنفذ أو تعدل البيانات.

مزايا CQRS:

  • يسمح باستخدام نماذج بيانات مختلفة لكل نوع من العمليات، مما يعطي مرونة أكثر للتطبيق.
  • تعديلات البيانات ما تأثرش على باقي النظام لأن مافماش حاجة لـ قفل الجداول أو السجلات (Lock Tables or Records).
  • تخصيص البيانات حسب احتياجات القراءة والكتابة.
  • إمكانية استخدام تقنيات تخزين مختلفة حسب كل نوع من العمليات.
  • تسهيل توسيع التطبيق وتوزيع الموارد بشكل منفصل بين القراءة والكتابة.

تطبيق CQRS

في التطبيقات الكبيرة، كيف التطبيق يسترجع بيانات، أحيانًا يحتاج ينفذ استعلامات معقدة (Complex Queries) باش يرجع Data Transfer Objects (DTOs). العملية هذي تزيد في تعقيد تحويل البيانات.

من جهة أخرى، وقت التطبيق يكتب بيانات، النموذج ممكن يحتوي على:

  • عمليات تحقق معقدة (Validation).
  • منطق الأعمال (Business Logic).

هالحاجات تزيد تعقيد النموذج وتخليه يحمل مسؤوليات كثيرة. باستخدام CQRS، المشاكل هذي تتحل لأن كل عملية عندها مسؤوليات واضحة ونموذج مخصص ليها.

🔍 في النهاية، الـ CQRS مش مجرد نمط، هو طريقة تخليك تحسّن تطبيقاتك وتخدم بكفاءة أكبر.

Leave a comment

Your email address will not be published. Required fields are marked *