![]() |
|
N-Tier_LINQ_To_SQL_SP - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم تقنية LinQ (http://vb4arb.com/vb/forumdisplay.php?fid=204) +--- الموضوع : N-Tier_LINQ_To_SQL_SP (/showthread.php?tid=9964) الصفحات:
1
2
|
N-Tier_LINQ_To_SQL_SP - Sajad - 07-08-13 بسم الله الرحمن الرحيم
وصلى الله على محمد وآله الطاهرين السلام عليكم ورحمة الله وبركاته كل عام وأنتم بخير بمناسبة عيد الفطر المبارك أعاده الله علينا وعليكم بالخير والبركة ![]() مقدمة: بحول الله تعالى سنتكلم في هذا الموضوع عن تعدد الطبقات وأهميتها في تصميم التطبيقات. تعريف: N-Tier: تعني بأن هيكلية التطبيق تتألف من عدة طبقات تتعامل مع بعضها البعض بنسق واضح, وكل طبقة تكون مسؤولة عن عمل معين ولها وظيفتها. إن اغلب التطبيقات تنقسم الى ثلاث أجزاء تعرف بـ 3Tier وهذه الطبقات هي: 1- طبقة العرض. (Presentation Layer) 2- طبقة الاعمال. Business Layer) ) أ- طبقة الخصائص. (طبقة جزئية من طبقة الاعمال) 3- طبقة البيانات. (Data Layer) المخطط التالي يببن ذلك: لنشرح هذه الطبقات بالتفصيل: 1- طبقة العرض (Presentation Layer): وهي طبقة توفر واجهة رسومية للمستخدم حيث تستخدم لعرض البيانات والتعامل معها, وهذه الطبقة الوحيدة التي تكون في تفاعل مباشر مع المستخدم. وظيفتها تمرير البيانات المدخلة الى الطبقة الوسطى (طبقة الاعمال)أو لجلب البيانات المعالجة منها. طبقة العرض كما بينا توفر واجهة رسومية كأن تكون تطبيقات ويندوز أو ويب وهذه التطبيقات تتكون من عناصر التحكم مثل TextBox, CommandButton أو أي اداة أخرى. 2- طبقة الاعمال (Business Layer ): طبقة تكتب فيها الدوال أو الوظائف أو أي عمليات أخرى تعمل كوسيط بين طبقة العرض وطبقة البيانات, وظيفتها نقل البيانات بين طبقتي العرض والبيانات. وهي عبارة عن فئة تحتوي على دوال تقوم بجلب البيانات المدخلة من طبقة العرض وتقوم بارسالها الى طبقة البيانات. أ- طبقة الخصائص: طبقة جزئية من طبقة الاعمال تكتب فيها المتغيرات المقابلة للحقول في الجدول في قاعدة البيانات. حيث تستخدم هذه الطبقة كحاوية للبيانات وذلك لتمرير البيانات المدخلة أو المعالجة بين الطبقات. *المدخلة من قبل المستخدم والمعالجة من قبل طبقة البيانات. 3- طبقة البيانات (Data Layer): طبقة تقوم بتمرير البيانات من والى قاعدة البيانات وتتعامل فقط مع الطبقة الوسطى (طبقة الاعمال), وهي الجزء الوحيد التي تكون في تماس مباشر مع قاعدة البيانات حيث تشمل كل ما يتعلق من عمليات على قاعدة البيانات من كتابة الاستعلامات او استخدام الدوال او الاجراءات المخزنة. وهي عبارة عن فئة تقوم بجلب البيانات من الطبقة الوسطى وتمريرها الى قاعدة البيانات أو تقوم بجلب البيانات من قاعدة البيانات وتمريرها الى الطبقة الوسطى. فوائدها: أهم الفوائد 1- إعادة الاستخدام: إن من أهم فوائد الطبقات هو المقدرة على استخدام الطبقات في تطبيقات اخرى وخاصة طبقة الاعمال. 2- سهولة الصيانة: بما أن كل طبقة مستقلة عن الاخرى لذا التعديل على على أي طبقة لن يؤثر في الاخرى بصورة كبيرة. مثلا التعديل على طبقة البيانات لن يؤثر عل طبقة الاعمال والتعديل على طبقة العرض لن يؤثر على طبقتي الاعمال والبيانات. 3- من الممكن كتابة الطبقات بلغة مختلفة واستخدامها مع لغة اخرى. مثلا كتابة طبقتي العرض والبيانات بلغة VB واستخدامها في برنامج مكتوب بلغة C# وهذا مفيد جدا في نظام عمل الفرق حيث فريق يتعامل مع الطبقات وفريق يتعامل مع الواجهة بغض النظر عن اللغة كأن تكون المجموعة الاولى التي اسندت اليها تطوير طبقتي الاعمال والبيانات تتعامل بلغة VB والمجموعة التي تطور الواجهة تتعامل بلغة C#. برأيي هذه من أهم الفوائد. عيوبها: أهم العيوب 1- هيكليتها معقدة وصعبة. 2- تأخذ المزيد من الوقت. بصورة عامة أن التعامل مع هكذا هيكلية ممتع جدا واحترافي في نفس الوقت, صح أن انهائها تأخذ الكثير من الوقت لكن تقسيم التطبيق الى طبقات كل طبقة تؤدي وظيفتها تسهل للمستخدم التعامل مع التطبيق, بحث في آخر الامر سوف تتعامل فقط مع الدوال أو اسمائها بالاحرى والبيانات الممررة اليها. لتوضيح ما سبق من شرح سنقوم بعمل مثال يبين ذلك بلغة #C نعمل مشروع جديد من نوع Windows Application ونسميه Student_Project ونصمم النموذج بهذا الشكل: ونغير اسم النموذج الى MyForm بعد أن ننتهي من تصميم النموذج ننتقل الى انشاء الطبقات لذلك سوف نقوم ببناء طبقة البيانات ومن ثم نتدرج الى طبقة الاعمال ومنه الى تكملة طبقة العرض. 1- بناء الجزء الاول من طبقة البيانات (Data Layer) وهي انشاء قاعدة البيانات: من الـ Server Explorer نقوم بانشاء قاعدة بيانات SQL ولتكن اسمها Sample في مجلد المخرجات للمشروع Student_Project ثم نقوم باضافة جدولين باسماء tblStudent و tblProject ونقوم باضافة الحقول اليها ونضبط خصائصها كما في الشكل التالي: مع جعل الـSid والـPid كـ Identity Column وذلك من نافذة الـProperties التي على اليمين. ولعمل علاقة بين الجدولين نتبع الخطوات التي في الصورة التالية: 1- كلك يمين على جدول tblProject. 2- اضغط على Relationships. 3- اضغط Add. 4- اضغط على Table And Columns Specification ستظهر نقاط صغير اضغط عليها. 5- من هذه النافذة نحدد الجدول الرئيسي والجدول الثانوي وكذلك الحقل الرئيسي والثانوي. نفتح الـ INSERT And UPDATE Specification ونجعل Delete Rule و Update Rule الى Casecade لغرض تطبيق التغييرات على الجدول الثانوي. بعد الانتهاء من انشاء العلاقة بين الجدولين نقوم بانشاء View باسم tblView بالشكل التالي: 1- كلك يمين على Views. 2- نضغط على Add New View. 3- نختار جدول tblStudent ثم Add. 4- نختار جدول tblProject ثم Add. 5- نختار الحقول كما في الصورة ثم نخزن الـView باسم tblView. الغرض من انشاء View هو انشاء استعلام جاهز يربط بين الجدولين لغرض البحث وجلب البيانات, بمعنى عند انشاءنا للاجراءات المخزنة سوف لن نضطر الى ربط الجدولين ببعض أي سوف لن نستعلم من الجدولين في عملية البحث وجلب البيانات بل نعتمد على الـView ونستعلم من الـView فقط. الان نأتي الى الاجراءات المخزنة: سوف ننشأ 7 اجراءات مخزنة للتعامل مع قاعدة البيانات تشمل الاضافة التعديل الحذف البحث واستيراد البيانات. لانشاء اجراء مخزن نتبع الخطوات التالية: وهذه الاجراءات هي : 1- اجراء اضافة طالب: PHP كود : CREATE PROCEDURE dbo.spInsertStudent2- اجراء اضافة مشروع: PHP كود : CREATE PROCEDURE dbo.spInsertProject3- اجراء الحذف: PHP كود : CREATE PROCEDURE dbo.spDelete4- اجراء تعديل طالب: PHP كود : CREATE PROCEDURE dbo.spUpdateStudent5- اجراء تعديل مشروع: PHP كود : CREATE PROCEDURE dbo.spUpdateProject6- اجراء جلب البيانات: PHP كود : CREATE PROCEDURE dbo.spGetAllData7- اجراء البحث باسم الطالب: PHP كود : CREATE PROCEDURE dbo.spSearchByNameلاحظ اخي العزيز أننا في الاجرائين البحث واستيراد البيانات استعلمنا من الـView. بعد الانتهاء من انشاء الاجراءات المخزنة نضيف الى المشروع مشروع جديد من نوع Class Library بالشكل التالي: كلك يمين على الـSolution ثم Add ثم New Project واختر Class Library غير الاسم الى MyDlls, بعد اضافة المشروع امسح الفئة الافتراضية التي هي باسم Class1 من الـSolution Explorer. نضيف مجلدين الى MyDlls باسماء MyClasses و LinqClass بعد اضافة المجلدين نضيف ثلاث فئات الى المجلد MyClasses عن طريق كلك يمين على المجلد ومن ثم اختيار Class الاول باسم BLayer والثاني باسم DLayer والثالث باسم Variables بعدها كلك يمين على مجلد LinqClass ومن ثم Add ثم New Item ثم Data ثم أختر LINQ To SQL Classes ثم Add بدون تغيير الاسم (DataClasses1.dbml) نفتح مجلد الـLinqClass ثم نضغط مرتين على DataClasses.dbml لتنفتح لان منصة LINQ ثم نضغط على منصة LINQ (أي المساحات الفارغة), ونغير اسم الـLINQ الى DataBase عن طريق الـProperties من اليمين. الان نقوم بسحب الجداول والاجراءات الى منصة LINQ بالشكل التالي: لاحظ يتم ادراج الجداول والاجراءات الى المنصة عن طريق السحب والافلات. وعند سحب الجداول سيتم انشاء نص الاتصال في الـSettings باسم SampleConnectionString. الان سوف نبدأ بالعمل على طبقة البيانات بجزئها الثاني: كما لاحظت في ما سبق انتهينا من الجزء الاول لطبقة البيانات وذلك بانشاء قاعدة البيانات والجداول والاجراءات لذا سنبدأ بالجزء الثاني: الفئة التالية وهي الفئة DLayer تمثل طبقة البيانات بجزئها الثاني: PHP كود : using System.Collections.Generic;لنبدأ بتوضيح الفئة DLayer خطوة خطوة: لاحظ مجالات الاسماء التالية: PHP كود : using System.Collections.Generic;الاول لغرض استخدام القوائم الثاني لاستخدام استعلامات LINQ والثالث لاستخدام الفئة DataBase لان هذه الفئة داخل المجلد LinqClass والبرنامج يعتبر المجلد كـNameSpace والرابع للوصول الى الـSettings. المتغيرات: PHP كود : #region المتغيراتالاول لتعيين نص الاتصال, كما اسلفنا عند وضع الجداول الى منصة LINQ يتم انشاء الاتصال في الSettings. الثاني متغير من نوع DataBase للوصول الى الجداول والاجراءات التي في منصة الـLINQ الرابع متغير من الطبقة الجزئية من طبقة الاعمال لغرض البحث والتصفح. شرح الدوال: الدالة Connect لغرض الاتصال. بقية الدوال تأخذ مدخل من نوع Variables لغرض احتواء البيانات وتوصيلها بين الطبقات كما بينا سابقا, ما عدا دالة الـSelectAll لا تأخذ أي مدخل. وبما أننا نتعامل مع الاجراءا المخزنة لذا سوف لن نتعامل مع الدوال التالية: PHP كود : InsertOnSubmitبل سوف نستدعي الاجراءا المخزنة لانها اصبحت جزءا من دوال الـLINQ. لذا كما ترى في عمليات الاضافة والحذف والتعديل نستدعي الاجراءات المخزنة ثم نمرر اليها المدخلات اللازمة فقط لا أكثر ولا أقل. في دالة اضافة طالب جديد نقوم بعد الاضافة بارجاع رقم الطالب الذي اضفناه الى جدول tblStudent لغرض اضافة الرقم الى جدول tblProject لانه يوجد علاقة بين الجدولين حسب رقم الطالب. 2-لننتقل الان الى الطبقة الوسطى طبقة الاعمال (BLayer): اولا الطبقة الجزئية من طبقة الاعمال وهي طبقة المتغيرات أو الخصائص: PHP كود : namespace MyDLLs.MyClassesوهي طبقة تضم المتغيرات (الحاويات) التي سوف تنقل البيانات بين الطبقات. طبقة الاعمال (BLayer): PHP كود : using System.Collections.Generic;هذه الطبقة تضم متغير من نوع DLayer لغرض الوصول الى دوال طبقة البيانات, لانه وكما بينا هي الطبقة الوحيدة التي تتعامل مع طبقة البيانات (DLayer). دوال طبقة الاعمال: دالة بناء وفيه ننشء Instance من الفئة DLayer وبقية الدوال واضحة ولاتحتاج الى شرح ![]() هنالك ملاحظة صغير في دالة الـInsert في هذا السطر PHP كود : v.Sid = _dl.InsertStudent(v); 3- أخيرا ننتقل الى طبقة العرض: اولا ننشئ مجلد جديد في Students_Projects نسميه MyFroms ثم ننقل MyForm.cs و Program.cs الى المجلد ثم نعمل Build لـMyDlls بعد عمل ذلك ننتقل الى Student_Project ثم نضيف ملف الـdll اليه عن طريق كلك يمين على References للـStudent_Project ومن ثم اختيار MyDlls ومن ثم نضبفه الى الكود بالشكل التالي: PHP كود : using MyDLLs.MyClasses; لاحظ أنه الفئات كلها داخل مجلد MyClasses لذا يجب ذكر ذلك فبدونها لن نستطيع أن تستخدم الفئات. المتغيرات: PHP كود : #region المتغيرات العامةشرح الكود: 1- قائمة من نوع Variables لتصفح البيانات. 2- متغير من فئة Variables لاحتواء البيانات التي ستمرر الى طبقة الاعمال. 3- متغير من فئة BLayer لاستدعاء دوال الطبقة الوسطى. 4- متغيرين من نوع int ونضع هذا الكود في دالة البناء أو في حدث الـLoad للـ Form PHP كود : _v = new Variables();الدوال العامة: PHP كود : #region الدوالشرح الكود: الدالة الاولى لغرض عرض البيانات في الـFrom والدالة الثانية لعرض البيانات في الـDataGridView والدالة الثالثة لاستدعاء دالة SelectAll ودالتي العرض. عرض البيانات: PHP كود : private void Showbtn_Click(object sender, EventArgs e)اضافة البيانات: PHP كود : private void Addbtn_Click(object sender, EventArgs e)[u]شرح الكود:[/u] لاحظ كيف يتم احتواء البيانات من قبل الفئة Variables المتمثل بالمتغير _v ومن ثم يتم تمريرها الى دالة الـInsert. [u]تعديل البيانات:[/u] PHP كود : private void Updatebtn_Click(object sender, EventArgs e)شرح الكود: مثل الكود السابق يتم احتواء البيانات وبعدها يتم ارسالها الى الدالة Update. حذف البيانات: PHP كود : private void Deletebtn_Click(object sender, EventArgs e)شرح الكود: في البداية يتم التأكد من عدم خلو الجدول من البيانات وبعد ذلك يتم الحذف على اساس الـSid والتي يتم جلبه من خلال القائمة List<Variables> المتمثلة بالمتغير _vList . البحث: PHP كود : private void Searchbtn_Click(object sender, EventArgs e)شرح الكود: لاحظ كيف يتم احاطة كلمة البحث بعلامتي % وذلك لاستتخدامنا لـ Like Clause في عملية البحث بالاجراء المخزن الخاص بالبحث. مسح محتوى الـTextBox: PHP كود : private void deletecontent_Click(object sender, EventArgs e)أكواد السجل الاول, التالي, السابق, الاخير: PHP كود : private void nextbtn_Click(object sender, EventArgs e)المثال في المرفقات بلغة #C واوعدكم انني باذن الله سوف اعمل مثال بلغة VB.NET وارفقه حال انتهائي منه في هذا الموضوع. وإني بانتظار ملاحظاتكم واستفساراتكم القيمة. اسأل الله أن أكون قد وفقت لتوصيل الفكرة اليكم ,ولا تنسوني و والدي من صالح دعواتكم. والسلام عليكم ورحمة الله وبركاته N-Tier_LINQ_To_SQL_SP - Sajad - 07-08-13 السلام عليكم المثال في المرفقات N-Tier_LINQ_To_SQL_SP - أبو يعقوب - 08-08-13 تسلم ايدك لي عودة ان شاء الله N-Tier_LINQ_To_SQL_SP - ابو ابراهيم - 08-08-13 [COLOR="#0000CD"]اخي sajad ما شاء الله تبارك الله ونعم المعلم انت وإني منتظر للكود الخاص بالدوت نت [/COLOR] N-Tier_LINQ_To_SQL_SP - Sajad - 08-08-13 السلام عليكم ورحمة الله وبركاته المثال في المرفقات بلغة vb بانتظار ملاحظاتكم N-Tier_LINQ_To_SQL_SP - Sajad - 08-08-13 السلام عليكم إقتباس :اخي sajad الله يبارك فيك و يوفقك يعطيك العافية N-Tier_LINQ_To_SQL_SP - Sajad - 15-08-13 السلام عليكم إقتباس :تسلم ايدك الله يسلمك اخي العزيز منتظرك ان شاءالله N-Tier_LINQ_To_SQL_SP - أبو يعقوب - 15-08-13 جايك ان شاء الله، شغلنا العيد وما تلاه N-Tier_LINQ_To_SQL_SP - Abdullah0991 - 15-08-13 بارك الله فيك ,, موضوع مميز ![]() بالتوفيق N-Tier_LINQ_To_SQL_SP - أبو يعقوب - 15-08-13 السلام عليكم سأكتب ردي على مراحل إقتباس :: تعني بأن هيكلية التطبيق تتألف من عدة طبقات تتعامل مع بعضها البعض بنسق واضح, وكل طبقة تكون مسؤولة عن عمل معين ولها وظيفتها.إلى هنا أتفق معك، وإن كان مسمى الخصائص من وجهة نظري غير دقيق (كل الأسماء التي أعرفها لهذه الطبقة اجنبية، وتسمى عادةً Domain Model) إقتباس :3- طبقة البيانات. (Data Layer) هذه الطبقة يأتي قبلها Data Access Layer = طبقة الوصول إلى البيانات وهي تتكون من فئات الاتصال وتنفيذ الأوامر التي تعامل مع محرك قاعدة البيانات Sql Server أو غيره |