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
أنا بالأصل، يعني من هندستي وال Generator من برمجتي لأني أتبع طريقة ثابتة فقررت أعمل مولد كود ، بس أعطيه الخصائص واسم الفئة والعلاقات والوراثة وهو يعمل الكود كله وهالشي يسرع بناء البرامج ويبقى Design فقط (الGenerator استغرق مني اسبوع كامل)
إقتباس :طيب على كل الاحوال :
راح اتعامل مع المثـــال بصفتي ضابط شرطة ,,, بمعنى : سيتم اخضاع المثال للتحقيق والأستجواب القاسي .
والسبب : أول مرة أشعر بأن هناك نقطة ضعف عندي في كتابة الكود ولازم يتم تصحيحها مهما كلفني الأمر .
هالأسلوب هذا كلفني إعادة برمجة "محرك" مشروع تخرجي (قبل 3 سنوات) مرتين كان جداً معقد، إلى أن رسيت على هذا الأسلوب طبعا كان يعاني من ضعف وطورته على مرحلتين
انه عالم هندسة البرامج، صديقي المفضل هو برنامج Reflector حيث أتطفل على البرامج الاحترافية المعمولة بالدوت نت واتعلم من هندستها (بقدر ما أفهم)