أكتوبر « 2012 « مغامرات برمجية

الأرشيف: أكتوبر 2012

تعديل ما لا يمكن تعديله باستخدام Extension Methods

نّشر في: 2012/10/30
تعليقات: تعليق واحد

أحياناً كثيرة نستخدم كوداً لم نطوره شخصياً. هذه سنة الحياة بالنسبة للمبرمجين. وأحياناً كثيرة يكون هذا الكود داخل DLL. أي بمعنى آخر، لا نستطيع التعديل عليه. وهذا لا بأس به في معظم الأحيان حينما يكون هذا الكود يناسب احتياجاتنا. ولكن سنة أخرى من سنن حياة المبرمجين هو أنه هناك دائماً حالات فردية واستثنائية.

قبل فترة كنت أعمل على تعديل تطبيق طوره فريق آخر (في دولة أخرى!) وأضيف بعض الخصائص الجديدة عليه. وكانت طبقة التواصل مع قاعدة البيانات Data Access Layer (أو DAL) مطورة باستخدام أداة غير مجانية. هذا كان معناه أنه رغم أن الكود المصدري لهذه الجزئية كان موجوداً، لم يكن بمقدوري التعديل عليه وعمل كومبايل دون أن نشتري هذه الأداة. وهذه لم تكن مشكلة، حيث أن جميع الإجراءات التي أحناجها موجودة.

أحدها كان الإجراء GetAllReports التابع للكلاس ReportDAL والذي يعطيني جميع التقارير قي سنة معينة. المشكلة كانت تكمن في أن هناك عملية تتكرر كثيراً وهي تصفية الناتح كثر بنوع التقرير. العملية ليست صعبة. سطرين أو ثلاثة باستخدام Linq كان كفيلاً بهذا. ولكن هذا الكود بدأ يتكرر بكثرة في أنحاء البرنامج، لذا أصبح من اللازم أن يصبح هذا الكود الجديد هو الآخر جزئاً من الـDAL. ولكن الكود لا يمكن تعديله (دون دفع نقود).

الحل الكلاسيكي كان أن نطور كلاي جديد يرث الـClass القديم ويضيف الدالة الجديدة. ولكن هذا مزعج حيث أنه علي تعديل البرنامج كله ليستخدم الكلاس الجديد. هنا تأتي فائدة الـExtension Methods.

(اقرأ المزيد …)

Post to Twitter

تصميم قواعد بيانات التقارير فائقة السرعة

نّشر في: 2012/10/08
تعليقات: 3 تعليق


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

ليس من المستغرب أن تجد بعض التقارير المعقدة تأخذ عدة دقائق فقط داخل استعلام الـSQL. وأحياناً كثيرة ينتج عن هذا امتعاض وعدم رضا المستخدم النهائي الذي في الغالب لن يقدّر مدى تعقيد طلبه، ولا يهمه سوى أن يرى النتيجة النهائية في أسرع وقت ممكن.

هناك عدة حلول سريعة، يعرفها معظمنا. وضع الاستعلام داخل Stored Procedure مثلاً، للاستفادة من سرعتها. إضافة index مناسبة للجداول التي يتم الاستعلام منها. وطبعاَ تحسين أداء الاستعلام بالتدقيق في الاستخدام الصحيح لعمليات Join وGroup وغيرها من العمليات المكلفة (إلقاء نظرة على الـexecution plan الخاصة بالاستعلام مقيد جداً).

ولكن أحياناً كثيرة كل ما سبق لا ينجح في تسريع الاستعلام بشكل مقبول. بالذات عندما يكون لدينا كم هائل من البيانات التي يجب أن نقوم بعمليات Join وGroup عليها.

عندها علينا أن نفكر في استخدام حل آخر. تطوير قاعدة بيانات رديفة خاصة فقط بالتقارير.

(اقرأ المزيد …)

Post to Twitter

page 1 of 1
Project Euler
أحدث التدوينات
تصنيفات
الأرشيف
منوعات
System Down على Twitter

مرحباً , تاريخ اليوم هو الخميس, 2017/03/23