المتابعون للمدونة

الثلاثاء، 15 أغسطس 2017

استخدام مصانع المزودات


استخدام مصانع المزودات عمليا:

خير طريقة لإدراك عبقرية مصانع المزودات، هي أن نعيد كتابة المشروع DbTasks بطريقة عامة، تسمح بالتعامل مع أي مزود بيانات.. في ذلك المشروع أنشأنا فئة اسمها MyDbConnector تسهل علينا إجراء أي عملية على قواعد بيانات سيكويل سيرفر.. الآن حان الوقت لنعمم هذه الفئة، بحيث نستطيع استخدامها للتعامل مع باقي أنواع المزودات التي يدعمها إطار العمل.. هذا هو ما فعلناه في المشروع Factories، الذي هو نسخة طبق الأصل من المشروع DbTasks، لكنه يعرض على النموذج زري تحويل Radio Buttons ليستطيع المستخدم اختيار التعامل مع قاعدة بيانات آكسيس أو قاعدة بيانات سيكويل سيرفر، والرائع حقا أن كود الأزرار الموضوعة على النموذج ظل كما هو بدون تغيير، بفضل استخدام مصانع المزودات!

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

كما عرفنا دالة اسمها GetProviderName، تستقبل قيمة المرقم Providers، وتعيد النص الذي يمثل اسم هذا المزود، لنرسله إلى الوسيلة DbProviderFactories.GetFactory للحصول على مصنع المزود الذي يريد المستخدم التعامل معه.. بعد هذا يصير من السهل استخدام وسائل هذا المصنع للحصول على كائن الاتصال وكائن الأمر وموصل البيانات اللازمة للتعامل مع قاعدة البيانات.

ولو نظرت إلى كود الفئة MyDbConnector في هذا المشروع، فستجد أن التعديلات التي أدخلناها طفيفة، لكن تأثيرها هائل، فقد صارت لدينا فئة عامة تستطيع أداء معظم ـ إن لم يكن كل ـ الوظائف التي نريدها على أي نوع من أنواع قواعد البيانات، ما يتيح لك استخدامها في مشاريعك لتقليل الكود الذي تكتبه إلى أقل حد ممكن!

لاحظ أننا نغير نوع قاعدة البيانات التي نتعامل معها، في حدث تغير الاختيار CheckedChanged الخاص بزري التحويل، وذلك بالكود البسيط التالي:
If RdSql.Checked Then
    DbBooks = New MyDbConnector(
                        My.Settings.BooksMdfConStr,
                        MyDbConnector.Providers.SqlServer)
Else
   DbBooks = New MyDbConnector(
                       My.Settings.BooksMdbConStr,
                       MyDbConnector.Providers.OleDb)
End If
حيث DbBooks هو متغير معرف على مستوى النموذج، نضع فيه نسخة الفئة MyDbConnector التي نستخدمها لتنفيذ وظائف الأزرار.
لاحظ أيضا أن استخدام الزر "الكتب1" لاستدعاء الإجراء المخزن، يستلزم منك أولا أن تستخدم المشروع AccessStoredProcedure لإضافة الإجراء المخزن GetAuthorBooks إلى قاعدة بيانات الكتب الخاصة بآكسيس. 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:

 

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر