الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ درس مهم جداً ] الطبقات المتعددة N-Tier بإستخدام ASP .NET 2

مغلق
بدأه أبـو فـارس في 12 مارس 2007 · 23 رد · 3,054 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

المصدر : http://www.althari.com/blog

ربما يقوم أحد بالعمل على إنشاء تطبيق الويب بتصميم شاشة العرض مباشرة بعد إنشاء قاعدة البيانات ومن ثم يقوم بالإتصال بقاعدة البيانات وكتابة ما هب ودب من أوامر الـ SQL

وبإستخدام تقنية ADO .NET يتم جلب البيانات وعرضها بعمل Loop للسجلات , قد تكون لديك هذه الخطوات منطقيه ! لكن بعد هذا الدرس , ستجد أنها فكره سيئه تكرار هذه العمليه مره أخرى !!

يتكون هذا الدرس على أسلوب رائع يتم إستخدامه من قبل كبار المبرمجين والشركات ليتم الحرص على تطبيق التطبيقات الصحيحة وعالية المستوى

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

وسأحرص على أن أشرح هذه الخطوات بشكل مختصر ومفيد وسأرحب لإي إستفسارات مقبله

الأن بسم الله الرحمن الرحيم نبدأ الدرس

الـ N-Tier او الطبقات المتعددة , هي بناء أو تصميم معماري وأسلوب يعمل على جعل التطبيق مقسم لعدة طبقات

ويساعد ذالك لترتيب وتنسيق التطبيق لتقسيم الأعمال بين فريق العمل ليساعد على بناء التطبيق بأفضل شكل , كما يساعد على سهولة تطوير التطبيق وبقائه أطول مده إذا لم تكن للأبد

كما أنه يساعد في تسهيل تطوير البرنامج بسرعه أفضل , لأنه حين تقسيم التطبيق إلى عدة طبقات فإنه بذالك يمكنك التعديل والإضافه في أي واحده من الطبقات لتطوير التطبيق والتعديل عليه بعكس أن يتم التعديل على التطبيق بالكامل لكي لا يكون هناك أي خلل

وعدد هذه الطبقات غير محصورة لكن أكثر إستخداماتها للمشاريع هي أربع طبقات وسيتضح لك الأمر بشكل أكبر حين ترا هذه الصوره

3-tiers.gif

يمثل هذا الشكل أشهر أربع طبقات بأسلوب الطبقات المتعددة :

1- طبقة العرض ( Presentation Tier ) : هذه الطبقة تمثل واجهة المستخدم للتطبيق وكل ما يراه المستخدم من صور وبيانات تنعرض له في شاشة الكمبيوتر .

2- طبقة الأعمال ( Business Tier ) : طبقة الأعمال أو في بعض الأحيان تسمى طبقة منطق الأعمال لأنها تعبر عن الطبقة التي يتم إستخدام فيها الأوامر المنطقية Logical Codes .

3- طبقة الوصول للبيانات ( Data Access Tire ) : وهي الطبقة التي تقوم بكتابة الإجراءات الخاصة للإتصال بقاعدة البيانات والوصول إليها .

4- طبقة البيانات ( Data Tier ) : وهي تمثل طبقة التخزين وقواعد البيانات والتي يتم فيها تخزين كامل البيانات المتعلقة بالتطبيق .

الأن سنبدأ في العمل على مشروع بسيط لتوضيح فكرة وطريقة عمل المشاريع بإستخدام أسلوب الطبقات المتعددة …

راح نقوم بالعمل على المشروع من الأسفل إلى الأعلى من الشكل السابق للطبقات المتعدده

بحيث أولاً راح ننشأ طبقة قاعدة البيانات , ثم راح ننشأ طبقة الوصول للبيانات , ثم راح ننشأ طبقة الأعمال , ثم راح ننشأ طبقة العرض .

الأن يجب علينا إنشاء قاعدة البيانات وهي بإستخدام أي نظام لقواعد البيانات ونحن هنا سنقوم بإنشاء قاعدة بيانات بإستخدام SQL Server 2005 عن طريق Visual Studio 2005

يتبع ...

تم تعديل هذه المشاركة بواسطة أبـو فـارس في 12 مارس 2007 في 19:01

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#2

طبقة قاعدة البيانات

1- إفتح برنامج الفيجوال ستيديو 2005

2- قم بإنشاء تطبيق ويب جديد

1.gif

2.gif

3- قم بإنشاء قاعدة بيانات SQL Database

3.gif

4.gif

4- أضف الجداول التالية بحقولها

5.gif

6.gif

7.gif

بعد ما قمنا بإضافة الجداول سنقوم الأن بالربط بينها بعلاقة تربطهما معاً

يتبع ...

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#3

والعلاقة واضحه أن كل منتج مربوط مع قسم معين , ونقوم بذالك عن طريق إضافة New Diagram في نافذة Server Explorer

8.gif

ثم نختار الجداول

81.gif

بعدها نربطهما معاً بهذه الطريقه , قم بالضغط على المفتاح الذي في صندوق Categoties وثم أسحبه إلى أن تصل إلى catID في صندوق Products ليتم ربطه به

82.gif

ستضهر لك هذه النافذة تبين لك أنك قمت بطلب ربط بين الحقلين في الجدولين كما هو موضح في النافذة .. أضغظ OK

http://www.abdulmalik.althari.com/wp/wp-co.../2007/03/83.gif

سترى الأن الربط بينهما واضح هكذا

84.gif

الأن إنتهينا من طبقة قاعدة البيانات بعدها سنقوم بالبدأ في طبقة الوصول للبيانات

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#4

طبقة الوصول للبيانات

1- إضغط على إنشاء عنصر جديد nitem.gif

2- إختر Dataset

9.gif

أختر قاعدة البيانات

10.gif

هنا يقوم بحفظ نص الإتصال في الـ Web.Config بهذا الاسم وإنتقل للخطوه التاليه

11.gif

هنا لينشأ أنواع الآوامر المناسبة

12.gif

في هذه النافذة التالية أضغط على Query Builder

13.gif

أختر الجدول Categories وضع علامة صح على الحقول

14.gif

هذه النافذه تبين لك أنه سيقوم بإنشاء دوال خاصة بتعبئة البيانات وجلبها

15.gif

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#5

الأن سنقوم بتعبأة جدول الأقسام يدوياً لتجهيزها وتجربتها

17.gif

18.gif

الأن إنتهينا من طبقة الوصول للبيانات , بقي لدينا ( طبقة الأعمال وطبقة العرض )

سنبدأ الأن في طبقة العرض

ننشأ MasterPage جديده عن طريق الضغط على عنصر جديد nitem.gif

ثم أختر كما في الصوره

19.gif

199.gif

20.gif

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#6

الأن سنقوم بإنشاء جدول لتنسيق الصفحه

21.gif

أختر الشكل الجاهز

22.gif

من نافذة Properties أختر DOCUMENT وفي الـ Dir اجعله rtl

23.gif

هذا لكي يجعل الصفحة من اليمين لليسار لأنها بالعربي

الأن تلوين الخلايا التي في الجدول لتنسيقها

24.gif

25.gif

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#7

ننشأ قائمة بالأقسام عن طريق أداة GridView

26.gif

27.gif

الأن إسحب Content Place Holder وهذه الأداة ليتم عرض محتوى الصفحات المتبقيه فيها عند إستخدام هذه الـ MasterPage

277.gif

الأن إنتهينا من طبقة العرض والحمد لله :) , ننتقل إلى طبقة الأعمال والتي هي الآوامر المنطقية .

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#8

طبقة الأعمال

نقوم بعرض صفحة الأعمال المنطقية بالضغط على View Code من الـ MasterPage

28.gif

29.gif

في الصورة التي فوقي نقوم بكتابة الـ NameSpace الخاص بالـ Adapter لقاعدة البيانات , والـ Adapter هو الموصل بين قاعدة البيانات و منطق الأعمال

ومن ثم نضيف الحدث Load من الصفحة ونكتب الكود الخاص بجلب البيانات وعرضها في طبقة التصميم ! , (( هل ترى معي الكيفية التي يتعامل معها الـ N-Tiers !! )) يقوم بالتنسيق بين الطبقات وتدريجياً لا عشوائياً

30.gif

31.gif

وكما بينت لكم فإن الطبقات تتعامل مع بعضها بأسلوب تدريجي منظم وهكذا يتم تنسيق العمل بين الفريق وتكون كل طبقة على حده ومتصله بالطبقه التي تليها

3-Tiers-ar.gif

الأن سنقوم بعمل صفحه جديده مشتقه من الـ Master Page بهذه الطريقه

أولاً نحذف الصفحه الخاليه التي لم نستخدم فيها الـ MasterPage

32.gif

ومن ثم ننشأ صفحه جديده ولكن مع إختيار صح على (( Select master page ))

33.gif

ونختار الـ Master Page تبعنا

34.gif

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#9

الأن إنتهينا من كل شيء

35.gif

نبدأ بعرض العمل

36.gif

ليضهر بالنتيجه المتواضعه التاليه

37.gif

كل ما هو مهم في هذه المقالة فكرة الطبقات المتعددة الـ N-Tier وكيفية التعامل معها وأسلوبها, أتمنى أن الفكره وصلت إن شاء الله تعالى

وبإذن الله سيتم طرح العديد من المواضيع الخاصة بالتطوير عبر هذا الأسلوب في مقالات جديدة ..

مع التحيه محبكم عبدالملك - أبو فارس.

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#10

ربي يوفقك حبيبي ومشكور على الدرس لكن أنا افضل الاسلوب القديم وحلقات التكرار لمرونتها وقوة التحكم

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#11

ألله يعطيك الف عافية

درس روعه

مـــبــــــرمـــــــج Asp.Net

لــخدمـ الـــبرمـــجـــة ـــــــات

يــــــــــرجــــى الاضــــافــــــة

Mr.Asp@Hotmail.Com

#12

ألف شكر على المرور

تحيه طيبه

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#13

السلام عليكم و رحمة الله و بركاته ،،

رائع!!!

عرض مذهل ،،، و مشجع جدا ... لدراسة كيفية إنشاء الطبقات ،

لو قرات هذا الموضوع قبل نصف سنة من الآن لما أصبحت هكذا :wacko: ،،

حسنا ، بالمناسبة لدي سؤال ( و هو سؤال وحيد هذه المرة ) :-

بخصوص انشاء العلاقات في طبقة قاعدة البيانات ، هل هو أمر ضروري ... أي بمعنى هل يمكنني الاستعاضة عن ذلك بإنشاء علاقات ضمن طبقة الوصول للبيانات ؟؟.

حيث تواجهني بعض المشاكل في عملية تعديل و إضافة البيانات ... الخ.

..

في هذه المرة استفدت من مهاراتك في التصميم أيضا في إنشاء و تنظيم الـ Layer ضمن طبقة عرض البيانات .

لك شكري و إمتناني.

، مع التحية .

#14

عودة مرة أخرى ...

سلام ..

كالعادة لا بد أن انسى شيئا !

بخصوص دراسة طبقة الـ الوصول للبيانات ( DAL) ، و طبقة الـ الأعمال ( BAL) ،

هنالك بعض التفاصيل التي يمكنكم التعرف إليها ... بعد متابعة هذا العرض الشيق من العضو الكريم : أبو فارس ..

عن طريق هذه الوصلات ..

Creating a Data Access Layer

Creating a Business Logic Layer

أتمنى أن تفديكم تلك الاضافة..

، لكم تحية .

#15

Thank's a lot Abu Fares.

For Julia:

I advice you to do this inside your Database. Sql Server is supported with tons of functions that help and of cource that will be usefull coz of those:

- Easy to update

- Gives high performance to the application

- can do the maintenance without stopping the application

I prefer making codes so simple to read and keep complicated calculations, data mapping and relations in the stored procedures.

this is always my way and am happy with it

good luck guys

You can fly while you can touch the sky

#16

السلام عليكم ....

أستاذي القدير / محمد خليل أبو صلاح

لنستوضح الأمور قليلا :-

أنت تنصحني بإنشاء العلاقات بين الجداول و جميع الدوال التي يتم اجراؤها على قاعدة البيانات ضمن طبقة قاعدة البيانات ..( و للمرة الثانية تكرر هذه النصحية على مسامعي )..

و لكن هل يعني ذلك أنه يمكنني الاكتفاء بإنشاء العلاقات بين الجداول ضمن طبقة الوصول لقاعدة البيانات ؟

ملاحظة :-

سبب عزوفي عن اللجوء لهذا الحل حتى الآن ، هو عدم وجود مرجع يمكنني دراسته لكيفية التعامل مع قاعدة البيانات التي يتم رفعها على الـ *-) SQL Server.

، شكرا لاهتمامكم الدائم بما يفيدنا.

، تحياتي.

#17

بتصدقي ولا مرة حصلت على كتاب لل SQL Server ما عدا كتاب ميكروسوفت الخاص بشهادة ال MCSD.NET

ولو عندك فكرة عن الكتب الخاصة بالشهادات رح تعرفي إنها غير مفيدة بشكل المطور بيطمح فيه.

بتذكر مرة اضطريت اكتب اجرائية مخزنة لمشروع كنت اعمل به لشركة بيبسي كولا .. لما طبعت الاجرائية على الطابعة

طلع معي ثلاث صفحات تخيلي؟ ما تسأليني كيف بدأت المهم نسأل ان المهمة لازم تنتهي

طبعا مع الخبرات و الاحتكاك بالمطورين الواحد بيتعلم اشياء كثيرة .. مثال بسيط ..

فكرت أعمل اجرائية انا بمرر ليها باراميتر معين و ترجعلي كل ال Categories حسب الطلب يعني هل هي مفعلة او لا

Active or not

لما بدأت أبرمج لوحة التحكم إكتشفت إني لازم اعرض كل التصنيفات Categories بغض النظر مفعلة او لا على الاقل لغرض

تفعيل ما هو غير مفعل و العكس حسب الرغبة .. شو المفترض المبرمج يعمل؟ المبتديء رح يفكر يعمل اجرائية اخرى تعيد

جميع التصنيفات صح؟

انا فكرت بعرض إما ال Active او ال Inactive او جميع التصنيفات من خلال اجرائية واحدة .. و بكود بسيط كالتالي:

CREATE PROCEDURE SP_SelectNavigationNode 
@IsActive bit = null
AS

Select * From Categories Where IsActive=ISNULL(@IsActive,IsActive) and Page='navg'
GO

اليوم أخدتي فكرة و من هناك فكرة و تعاون الاعضاء في افكار = مجموعة افكار .. يعني احتمال كبير استفيد من خبرتكم بالقريب العاجل

موفقين دايما

تم تعديل هذه المشاركة بواسطة walcom في 26 مارس 2007 في 09:47 — السبب: قوانين المشاركة تمنع وضع أو إرفاق سيريالات مع المشاركات

You can fly while you can touch the sky

#18

:D بالغلط طلع معي أول سطرين بيخصوا السيريال للفوتوشوب بس ما رح امسحهم يمكن غيري يستفيد ..

عموما انا رديت لحتى اوضح عمل الاجرائية مع انها واضحة

IsNull هنا لا تعيد Bool value و لكن هي تعيد قيمة الباراميتر @IsActive وفي حال عدم وجودها سوف تستبدلها بقيمة العمود IsActive

وهنا تكمن الحيلة .. يعني

لو مررنا في هذه الحالة true سوف تعيد كل السجلات التي قيمة العمود IsActive عندها true و في حال عدم تمرير اي قيمة

ستأخذ القيمة null وبالتالي سوف تقارن العمود IsActive مع نفسه و طبعا النتيجة دائما صحيحة وبالتالي سوف يتم أعادة كل السجلات

لتوضيح اخر نقطة

// If @isActive = true (1)
CREATE PROCEDURE SP_SelectNavigationNode 
@IsActive bit = null  -------> @IsActive = 1
AS

Select * From Categories Where IsActive=1 and Page='navg'
GO

// If @isActive = null 
CREATE PROCEDURE SP_SelectNavigationNode 
@IsActive bit = null 
AS

Select * From Categories Where IsActive=IsActive and Page='navg'  --- *
GO


* Like: Is 3=3? true ... is 13=13? true .. etc

بتمنى تكون الفكرة واضحة

تم تعديل هذه المشاركة بواسطة محمد خليل أبو صلاح في 20 مارس 2007 في 21:30

You can fly while you can touch the sky

#19

شكرا اخى الكريم ازادك الله

#20

ألف ألف شكر

على فكرة انت شرحت أفكار بطريقة سريعة بس كتير كتير رائعة

ومطبقة بتطبيقات كتير كبيرة على الانترنت

ومشاريع كاملة بتقوم على هالشي

الله يجزيك الخير يا رب

#21

ألف شكر لمروركم الكريم

وألف شكر لك أخي الغالي محمد خليل على الإجابه لإستفسارات الأخت الغاليه جوليا

واتمنى لكم التوفيق

محبكم عبدالملك

... والله أعلى وأعلم ...

w w w . a l t h a r i . c o m

a b d u l m a l i k @ a l t h a r i . c o m

#22
CREATE PROCEDURE SP_SelectNavigationNode 
@IsActive bit = null
AS

Select * From Categories Where IsActive=ISNULL(@IsActive,IsActive) and Page='navg'
GO

نعم الفكرة واضحة ,,, في حالة تمرير قيمة الباراميتر يتم تنفيذ الإجرائية حسب القيمة الممرة (true/false)

في حالة عدم تمرير الباراميتر او تمرير null يتم جلب كل الصفوف

كتابتها بصورة أطول

Create PROCEDURE SP_SelectNavigationNode 
@IsActive bit = null
AS

Select *  From Categories  
Where IsActive=@IsActive or IsActive is null
GO

شكرا محمد , ابو فارس

The World Must Be Crazy

#23

شكرا للأخ أبو فارس على الموضوع الشيق

هناك موضوع قد طرح هنا وهو انشاء العلاقات والتوابع في SQL Server بدلا من ان نقوم به في البرمجة

أنا أؤؤيد هذا الأمر إلى حد ما , منذ أيام وأنا أقوم بتعديل تقرير مهم , هذا التقرير يقوم بحسابات مقعدة في أكثر من مستوى ,الحقيقة يجب أن يطبع هذا التقرير للمستخدم النهائي وبحوزته معلومات مهمة ,هذه المعلومات مجمعة ومحسوبة من اكثر من 15 جدول

النقطة هنا , أنا التقرير أصبح بطئا جدا في الاستجابة ورغم أنني اطلت عمر ال Timeout إلا لم أنجح في تخطي البطأ , فقمت بتحويل بعذ التوابع التي استخدمتها في SQL Server إلى البرنامج وقد عمل بطريقة أسرع ولم تظهر مشكلة ال timeout مرة أخرى .

بالنسبة لموضوع ال SQL Server Books هناك أكثر من طريقة للحصول عليها

أولا عن طريق برنامج emule

http://www.emule-project.com

ثانيا : البحث في الموقع

http://www.rapidshared.org

ثالثا الانتظار حتى أقوم بتحميل بعض الكتب إلى موقعي الخاص :)

بالنسبة لموضوع تطبيقات ال Multi-Tier موضوع قديم جديد متجدد

ولقد قمت بدراسة لأكثر من طريقة في أفضل الطرق لعمل مثل هذا النوع من فصل لأجزاء التطبيقات إلى عرض وتنفيذ وتخزين وغيرها

وكانت تجربتي تتركز على أساس مهم عندي وهو توليد الشيفرة,إذ انه من الصعب كل مرة أن اكتب الشيفرة من البداية وهو ما يمسمى في البرمجة "Donkey Work"

وأعني بتوليد الشيفرة هو عمل قوالب جاهزة أمرر لها فقط قاعدة البيانات وهويقوم بتوليد ما هو ضروري من DAL إلى BDL

وقد :

جربت ال Microsoft

جربت ال Doodads

جربت ال EntitySpace

جربت ال Hibrnate

فوجدت أن طريقة Microsoft معقدة ويصعب توليد شيفرة لها,ولضخامة الشيفرة الخلفية التي تولدها مايكروسوفت

حاولت أن أدمج بنين ال Doodads و ال ObjectDataSource فوصلت إلى نتيجة مضنية بعد محاولات عدة

بالنسبة لل hibrante وهي طريقة مستوحاة من جافا , فإنها أكثر تعقيدا مما ذكر وقد هربت منها بسرعة

ال EntitySpace هي أفضل الموجود من ناحية السرعة ولكهنا تفتقر إلى الدمج مع تقنية مايكروسوفت الجديدة المتمثلة في SqlDataSource أو GridView

وبعد جهد جهيد , قمت بإنشاء قالب يقوم بدمج ال Doodads مع ال asp.net ويحاكي بطريقة ما ال Multi-Tier

صحيح لأنه كان يولد شيفرة ليست بالسهلة من أجل محاكاة ال Template الموجودة في ال GridView من أجل تعريب ال Headers ولكنها تجربت غنية بالأكواد المفيدة

الخلاة

موضوع ال Multi-Tier موضوع شيق ومهم ,ولكن المغزى هو أن تبدأمن حيث أنتهى الآخرون

هناك الكثير من الطرق لاستخدامها في هذا المجال ,وانصح بشكل كبير المرور على الموقع التالي لكل من هو مهتم بما يسمى ال ORM - Object-relational mapping وهو جزء مهم من ال Multi-Tier

http://www.mygenerationsoftware.com/portal/default.aspx

الحقيقة عن طريق هذا الموقع استطعت القيام بقالب ينشأ تطبيق ASP.NET كامل من حيث العمليات الأربعة على قاعدة البيانات والمعروفة بال CRUD Create-Read-Update-Delete وذلك فقط باستخدام الإجراءات في ال SQL Server

بالتوفيق ومنتظر ردودكم

مجموعة الدوت نت في السعودية , اشترك معنا لتحصل على كل مفيد في عالم الدوت نت

dotnetinsaudi-subscribe@yahoogroups.com

#24

ِشكرا ليك جدا على الشرح الجميل

وشكرا ل

onforall2012

على التعقيب الاجمل

:)

هذا الموضوع مغلق.

مواضيع مشابهة