تجاوز المحتوى

شرح قاعدة Command-Query Separation Principle

اسم القاعدة: Command-Query Separation Principle وتختصر CQS

تهتم هذه القاعدة بأسلوب كتابة الميثودز. فهي تقسم عمل المثود إلى نوعين:

  • أمر: أي أن الميثود تقوم بإجراء مؤثر على بيانات مستهدفة
  • استعلام: أي أن الميثود تقوم باستعلام مطلوب عن بيانات مستهدفة وإعادة النتيجة لمن طلب هذا الاستعلام بدون أي تأثير على البيانات

هذا مثال سابق استخدمته في شرح قاعدة المسؤولية الواحدة Single Responsibility Principle وقد تعمدت في ذلك الوقت مخالفة هذه القاعدة لشرحها في مقالة منفصلة.

يظهر في المثال السابق مخالفة صريحة لهذه القاعدة. لأن كل ميثود هنا تقوم بالعملين معاً أمر و استعلام.

فميثود saveEmployee تقوم بحفظ بيانات الموظف (أمر) ثم تعيد نتيجة الإضافة (استعلام).
وميثود deleteEmployee تقوم بحذف بيانات الموظف ثم تعيد نتيجة الحذف.

و تصحيح المخالفة يكون بالتعديل التالي على الكود السابق:

بعد التعديل، لا نقوم بإعادة true أو false كنتيجة للإضافة أو الحذف. لأن الأصل في الأمر أن تتم العملية بنجاح. إذا فشلت العملية فإن هناك مشكلة في قاعدة البيانات أو في الاتصال. لهذا نبلغ عن المشكلة عن طريق إرسال استثناء من الميثود وليس عن طريق true أو false.

بهذه الطريقة نكون طبقنا قاعدتنا. والفائدة كما يلي:
جعلنا هذه الميثود ذات مسؤولية واحدة فقط. مما يسهل فهمها وفهم عملها من مجرد قراءة توقيعها.

حذفنا مسؤولية الاستعلام عن الميثودز وهو إرجاع true أو false، لأن هذه الطريقة لا تعطينا معلومات كافية عن الخطأ.

مثلاً قد يكون الخطأ حدث في هذه المحاولة بسبب ضعف الاتصال، فيمكننا إعادة المحاولة مباشرة. أما إذا كان الخطأ بسبب انقطاع في الاتصال أو أن قاعدة البيانات تعطلت فنستطيع إنهاء العملية بدون محاولة ثانية.

Published inبرمجة

كن أول من ‫يعلق على المقالة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *