تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
OOP N-Tire Example
#1
بسم الله الرحمن الرحيم
سألني أحد الشباب عن كيفية أنشــــاء تطبيق متعدد الطبقات

صممت له هذا المثال البسريع والبســــــــيط ورفعته هنـــــــــــــــــا لتــعـــــــــم الفــــــــائدة .

بعض الصور التوضيحية :





أنشــــــاء الأجراءات :






تحيـــــــــاتي للجميع .


Abu Ehab : Microsoft Partner  & Systems Developer
}}}}
تم الشكر بواسطة:
#2
اقل ما يقال
مبدع دائماّ
"الناس نيام فإذا ماتوا إنتبهوا"
}}}}
تم الشكر بواسطة:
#3
الله يعطيك العافيه
}}}}
تم الشكر بواسطة:
#4
الله يزيدك عافية أخي ربيع ... مشتاق لك كثير
على فكرة :
هذا المثال اللى طلبه مني شريف خالد على سكايب ..
وعلى فكرة مستواه في تحسن مستمر ..

Abu Ehab : Microsoft Partner  & Systems Developer
}}}}
تم الشكر بواسطة:
#5
جزاك الله كل خير يا أبو إيهاب, مبدع بكل مشاركاتك ...
}}}}
تم الشكر بواسطة:
#6
وأخيرا تعلمت الـ 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


الملفات المرفقة
.rar   OOP NTier Ex2010.rar (الحجم : 31.17 ك ب / التحميلات : 45)
}}}}
تم الشكر بواسطة:
#7
السلام عليكم

هذة وجهت نظرك وبحترمها كثير .. . ما دام أنها تجربة 3 سنوات مع هذة التقنية
بتقدر تقول أني مازلت في بداية التعامل معها لأني في الغالب بتعامل مع linq

طيب :
المثال 2012 أذا ممكن تحوله الى أصدار أقدم حتى اتمكن من الأطلاع عليه

Abu Ehab : Microsoft Partner  & Systems Developer
}}}}
تم الشكر بواسطة:
#8
Abu Ehab كتب :السلام عليكم

هذة وجهت نظرك وبحترمها كثير .. . ما دام أنها تجربة 3 سنوات مع هذة التقنية
بتقدر تقول أني مازلت في بداية التعامل معها لأني في الغالب بتعامل مع linq

طيب :
المثال 2012 أذا ممكن تحوله الى أصدار أقدم حتى اتمكن من الأطلاع عليه

عليكم السلام

تم تغيير الملف المرفق على 2010
}}}}
تم الشكر بواسطة:
#9
إقتباس :وأخيرا تعلمت الـ Stored Procedures

شو قصدك ..(ماذا تعني).؟؟

إقتباس :ملاحظة: الكود للمطالعة وتم بناؤه بواسطة Code Generator

يعني مش أنت اللى كتبت الأكواد .. صح ؟


راح أحـــــــاول أستفيد منه أكيــــــــد ....
[SIZE=4]

تحياتي.
[/SIZE]

Abu Ehab : Microsoft Partner  & Systems Developer
}}}}
تم الشكر بواسطة:
#10
إقتباس :شو قصدك ..(ماذا تعني).؟؟

اتكلم عن نفسي حط ضمة على التاء

وأخيرا أنا تعلمتُها من مثالك يعني
إقتباس :يعني مش أنت اللى كتبت الأكواد .. صح ؟

أنا بالأصل، يعني من هندستي وال Generator من برمجتي لأني أتبع طريقة ثابتة فقررت أعمل مولد كود ، بس أعطيه الخصائص واسم الفئة والعلاقات والوراثة وهو يعمل الكود كله وهالشي يسرع بناء البرامج ويبقى Design فقط (الGenerator استغرق مني اسبوع كامل)

إقتباس :طيب على كل الاحوال :
راح اتعامل مع المثـــال بصفتي ضابط شرطة ,,, بمعنى : سيتم اخضاع المثال للتحقيق والأستجواب القاسي .
والسبب : أول مرة أشعر بأن هناك نقطة ضعف عندي في كتابة الكود ولازم يتم تصحيحها مهما كلفني الأمر .

هالأسلوب هذا كلفني إعادة برمجة "محرك" مشروع تخرجي (قبل 3 سنوات) مرتين كان جداً معقد، إلى أن رسيت على هذا الأسلوب طبعا كان يعاني من ضعف وطورته على مرحلتين

انه عالم هندسة البرامج، صديقي المفضل هو برنامج Reflector حيث أتطفل على البرامج الاحترافية المعمولة بالدوت نت واتعلم من هندستها (بقدر ما أفهم)

بالتوفيق أخي الكريم،
}}}}
تم الشكر بواسطة:


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم