23-04-13, 11:00 PM
(آخر تعديل لهذه المشاركة : 24-04-13, 11:24 AM {2} بواسطة بشار الذيب.)
وأخيرا تعلمت الـ Stored Procedures
اعلم يا أخي أن أسلوب تعدد الطبقات هدفه التبسيط والهروب من التعقيد
المثال المطروح فيه فئة تمثل بيانات Products وهي مجرد حامل للبيانات، في حين أنه من الجميل ان تحتوي على هذه الإجراءات الأساسية Save,Delete,GetAllProducts,Create
وينبغي وجود دالتين أساسيستين للتحويل من DataRow إلى Product أو PData كما في المثال والأخرى للتحويل من جدول إلى لستة DataTable To List(Of PData)
مع ملاحظة أنه يجب منع مستخدم الفئة من إنشاء نسخة كائن منها مباشرة وذلك لأمور تقنية كالتحقق من القيم، وخصوصا موضوع الAutoNumber بالنسبة للID لذلك لا يتم إنشاء نسخة من الفئة إلا إذا كانت موجودة في قاعدة البيانات بالفعل - من وجهة نظري وتجربتي
شخصيا لا أحب التعامل مع DataTable وأخواتها عندما أتعامل بنظام الطبقات ولكن ليس هناك مانع فهي تبقى فئة تعزلني عن فئات الاتصال مع قاعدة البيانات وتبقى فائدتها أنها صديقة لأدوات Forms
لذلك كل العمليات في البرنامج تتعامل بالفئات التي عرفتها أنا وهي تحاكي بيانات الجدول
من خلال تجربتي أيضاً من المهم جدا أن يسمح مصمم الفئة لمستخدمها(يعني اسمح لنفسك في طبقة أعلى) بتنفيذ جمل SQL من نوع Select يعني تكون عبارة عن Function SelectProducts(Sql As String) As DataTable
طبعا لأني لا أحب الـ DataTable فأنا أُلغيها من فئاتي والبديل هو List(Of Products)
أنا أحب ترفيه مستخدم الفئة لذلك أضيف أحداث لذيذة مثل Saved,Deleted,Created طبعا كلها Shared وأبالغ في تدليله فأضيف الأحداث بالماضي والمضارع لكي أعطيه تحكم كامل
الأحداث مفيدة لإضافة نظام متعدد المستخدمين وفيه صلاحيات مثلا الحدث Saving يلتقطه نظام الصلاحيات قبل عملية الحفظ وبإمكانه السماح أو إلغاء العملية
سأضع مثال لأسلوبي(أسلوب تم تطويره على مدى 3 سنوات) على نفس الفئة طبعا فقط فئات من دون نوافذ ، وسيلاحظ من يراجع المثال أنه يمكن تغيير نوع قاعدة البيانات بكل مرونة
ملاحظة: الكود للمطالعة وتم بناؤه بواسطة Code Generator
اعلم يا أخي أن أسلوب تعدد الطبقات هدفه التبسيط والهروب من التعقيد
المثال المطروح فيه فئة تمثل بيانات Products وهي مجرد حامل للبيانات، في حين أنه من الجميل ان تحتوي على هذه الإجراءات الأساسية Save,Delete,GetAllProducts,Create
وينبغي وجود دالتين أساسيستين للتحويل من DataRow إلى Product أو PData كما في المثال والأخرى للتحويل من جدول إلى لستة DataTable To List(Of PData)
مع ملاحظة أنه يجب منع مستخدم الفئة من إنشاء نسخة كائن منها مباشرة وذلك لأمور تقنية كالتحقق من القيم، وخصوصا موضوع الAutoNumber بالنسبة للID لذلك لا يتم إنشاء نسخة من الفئة إلا إذا كانت موجودة في قاعدة البيانات بالفعل - من وجهة نظري وتجربتي
شخصيا لا أحب التعامل مع DataTable وأخواتها عندما أتعامل بنظام الطبقات ولكن ليس هناك مانع فهي تبقى فئة تعزلني عن فئات الاتصال مع قاعدة البيانات وتبقى فائدتها أنها صديقة لأدوات Forms
لذلك كل العمليات في البرنامج تتعامل بالفئات التي عرفتها أنا وهي تحاكي بيانات الجدول
من خلال تجربتي أيضاً من المهم جدا أن يسمح مصمم الفئة لمستخدمها(يعني اسمح لنفسك في طبقة أعلى) بتنفيذ جمل SQL من نوع Select يعني تكون عبارة عن Function SelectProducts(Sql As String) As DataTable
طبعا لأني لا أحب الـ DataTable فأنا أُلغيها من فئاتي والبديل هو List(Of Products)
أنا أحب ترفيه مستخدم الفئة لذلك أضيف أحداث لذيذة مثل Saved,Deleted,Created طبعا كلها Shared وأبالغ في تدليله فأضيف الأحداث بالماضي والمضارع لكي أعطيه تحكم كامل
الأحداث مفيدة لإضافة نظام متعدد المستخدمين وفيه صلاحيات مثلا الحدث Saving يلتقطه نظام الصلاحيات قبل عملية الحفظ وبإمكانه السماح أو إلغاء العملية
سأضع مثال لأسلوبي(أسلوب تم تطويره على مدى 3 سنوات) على نفس الفئة طبعا فقط فئات من دون نوافذ ، وسيلاحظ من يراجع المثال أنه يمكن تغيير نوع قاعدة البيانات بكل مرونة
ملاحظة: الكود للمطالعة وتم بناؤه بواسطة Code Generator
