السلام عليكــم ورحمـة الله وبركاتــه
نظام الطبقات المتعددة في تطبيقات الويب
N-Tier Web Applications using ASP.NET(N-Tier Approach)
مقدمة
ينبغي على مطوري الويب " Web Developers" أن يدركوا أن عملية التطوير أوسع من مجرد كتابة الأسطر من الأكواد .
وفيما يلي تقديم لأستخدام اسلوب الطبقات المتعددة لعملية البرمجة "N-tier" والتى تعتمد على فكرة انشاء المشروع في صورة طبقات تختص كل منها بمهمه معينه ولها روابط بالطبقات المشتركة معها في المشروع , وذلك يمكنك من عمل تطبيقات مرنة ويمكن اعادة استخدامها "flexible and reusable application" و توزيعها في مشاريع أخرى يمكن أن نخاطب بها العديد من العملاء وهذا يمثل الثمرة الأساسية من أستخدام الأسلوب رغم تشعبه أكثر من التطبقات العادية التى تحتوى على طبقتين فقط العميل والسيرفر "The client and the server are the only layers ".
تشير N في N-tier إلى رقم الطبقة مثل 2-tier , 4-tier والتى ليس لها حد معين وهذه الطبقات يمكن أن تكون على أجهرة متنوعه مختلفة " separate physical machines " أو معزوله عن بعضها على نفس الآلة وذلك لأن كل طبقة – تطبيق – يختص بمهمه مختلفة لا تتداخل مع غيرها من وظائف الطبقات الأخرى.
التقنيات المستخدمة في ذلك"ASP.NET2.0 OR newer " ، هذا النموذج المقترح يحتوي على أربع طبقات :
- طبقة العرض "Presentation Layer".
- طبقة الأعمال "Business Logic Layer".
- طبقة التعامل مع البيانات "Data Access Logic Layer".
- طبقة البيانات "Database Layer".

أولا : طبقة البيانات
"Database Layer" OR "The Data Tier"
وهي الطبقة الخاصه بقواعد البيانات ومحتوها وتخزين المعلومات " Database component" أيا كان نوعها مثل التى يجرى عليها تطبيقات كبيرة " SQL Server and Oracle" والتي يكون لها منتج ضخم يجرى عليه عمليات كثيرة ومتكرره ، وبأختصار تختص الـ Data Tier بعلميات تخزين واستراداد المعلومات دون أن تهتم بكيفية استدعاء المعلومات أو طريقة التخزين والعرض.
ثانيا: طبقة العرض
OR "The Presentation Logic Tier""Presentation Layer
وهي الطبقة المعروفة والمعتادة في ""Web applications والتى تحوى " Windows forms " وASP form" و" documents" وتعمل هذه الطبقة بصورة أساسية كواجهة عرض للمتستخدم النهائي للتطبيق والتى تأتي في صورة نتائج أو مخرجات من طبقة الأعمال " Business Logic Layer " كى تتعامل معها لتخرج إلى هيئة تستخدم وسهلة القراءة للمستخدم النهائي صورة HTML" " ، في أغلب تطبيقات الويب المنتشرة تخاطب هذه الطبقة طبقة Data Access Layer مباشرة بحيث تندمج الطبقات مع بعضها فلا تنفصل عن طبقة الأعمال " Business Logic Layer " و""Data Access Logic Layer " بحيث تتم التعامل فيها مباشرة مع SQL SERVER بأستخدام ADO للتعامل المباشر مع الداتا بيز ولكن هذا خاطىء.
ثالثا: طبقة الأعمال
OR "The Business Tier" "Business Logic Layer"
تعتبر هذه الطبقة بمثابة عقل المحرك للتطبيق بمعنى أنها تحوى قواعد العمل ومطالب البيانات ..
مثلا لو انك تقوم بعمل تطبيق "محرك بحث" وتريد أن تقيم أو تزن ارتباط بند معين أو وحدة "Item" اعتمادا على معايير ترغب فيها --- يترجم هذا إلى تقيم الجودة " quality rating " وعدد المرات التى وجدت فيها كلمة البحث"Keyword" في النتائج .
هذه الطبقة لا تعرف اي شىء عن HTML ولا مدخلاتها أصلا وكذلك لا تعرف أي شىء عن SQL أو ADO ولا تحتوى على أي كود للتعامل مع قواعد البيانات .
ويتطلب الأمر معرفه قوية بـ " Object-Oriented Programming (OOP)" ومعرفة بمميزاتها جيدا ويوضح ذلك المثال التالي : في تطبيقات البيع على الويب "shopping cart application" مثل موقع ""Ebay و" Amazon " .. نقوم بعمل Object يقدم كل منتج للبيع " represent each product for sale " وفيه الـ standard propertyبها التعريفات والاسترجعات الأساسية " getters and setters" للـObject مثلـ " getSize, getColor, setSize, setColor" بمعنى المعلومات الأساسية للمنتج بمعنى أن الـ Object فقط يعرف الحصول على معلومات المنتج وكيف التحقق من يرسل إليه – وهذه فقط حدود عمله للأستعمال الداخلي " encapsulation "- خلال الـObject نفسه فلو سألت الـ "getPrice" فسوف ترجع لك قيمه السعر لوحدة واحدة وهذا هو ProductObject .
يمكننا أن ندرج الـProductObject في Object أخر وليكن CartObjectالذي يحوى العديد من الـproductObject وبالتالى يمكن للـ CartObject من التعامل مع خصائص الـObjects المحتواه .
ويمكننا عمل " enumerate (loop through) " على كل Product متضمن في cart مثلا عندما نطلب الـ"GetPrice" لـ CartObject معنى ذلك أنه يمر"loop" على كل الـproduct داخل CartObject ويحصل على سعرها ويظهر لك سعر المنتج الذى طلبه من خلال ProductObject الخاص به .
وكذلك عندما تفعل "saveCart" method ستقوم يمر على كل ProductObject المندرجة فيه ويفعل "saveProduct" method والذي الـObject المخاطب لـ "Data Access tier" ويفعل الـMethods بداخله والذي يخاطب بدوره الـDataTier للتعامل مع قواعد البيانات .
ويمكن بالطبع أن ندرج الـProductObject داخل SaleObject لفحص حاله البيع وما يختص بحالة السلعه البيعية وهلم جري .. ولكن يتضح التطبيق القوي لـ " OOP ".
ثالثا: طبقة التعامل مع البيانات
OR " Data Access Tier ""Data Access Logic Layer"
في هذه الطبقة نكتب الـMethods الرئيسية التى تعرض البيانات من طبقه البيانات ..
مثلا نقوم بعمل Method تقوم بالـ Connection objectوObject أخر للـ Command يتعامل مع StoredProcedure وكذلك methods مثل saveProduct والتى تعمل عند استدعاء الـProductObject ليتم عرض وتقديم البيانات المطلوبة من قواعد البيانات عبر طبقة البيانات ، ففي هذه الطبقة يكون جمل SQl " SQL statements " ولا تحتوى هذه الطبقة على اي قواعد عمل ولا تطبيقات.
ما سبق يعتبر الطبقات الأساسية ولكن الطبقات غير محدود بعدد ولذلك تحتوى بعض التطبيقات على طبقات أخري قد تكون متضمنه داخل الطبقات السابقة أو فيما بينها مثل طبقة البروكسي والتوزيع كما في الشكل التالي:

"The Proxy Tier and the Distributed Logic"
طبقة البروكسي والتى يمكن تعريفها على أنها شخص - Object – يأذن لأخر بعمل شيء ما.
هذا الـ Objectيشير إلى نوع من الأنشطة -code that is performing - تمرر إلى واحد إلي أخر -the client - .
وهذ الطبقة تعمل خلف طبقة التوزيعات – Computing Distributed Logic layer – أو خلف طلبات المستخدم النهائي - End-user's requests – لتعطيه إذن الدخول إلى الطبقة التالية " Business Logic Layer" , وتعتبر داخل " The Presentation Logic Tier"
ولكن سؤال يطرح نفسه لماذا نحتاج إلى ذلك أصلا؟
هذه الطبقة تيسر عملية التوجيه وتوزيع احمال - distributed computing - طلب التطبيق وحقيقة يتعلق الأمر بالمطور لتحديد طريقة الأتصال بين المدخلين بمعنى كيف يستطيع العميل مخاطبة بالسيرفر ؟
وهذا يجعلنا في حاجه إلى استخدام " Simple Object Access Protocol (SOAP) " وهي طريقة سهله عبارة عن – دون الخوض في التفاصيل – برتوكول لدخول الـObject في مكان أخر - (protocol) for accessing remote objects. - بمعنى طريق أتصال أو مخاطبة جهازين مع بعض - two machines "talking" or "communicating" - .
الاستنتاجات و الملاحظات النهائية
- في أغلب المشاريع والتطبيقات ستجد طبقة الأعمال و والتعامل مع البيانات موجودة داخل التطبيق وإن كان الأغلب أنهم مدمجين مع بعضهم .. أغلب طبقة الأعمال "Business Logic Layer" تتعامل مباشرة مع طبقة البيانات "Database Layer" بأستخدام الـ "ADO"بلا انشغال طبقة التعامل مع البيانات "Data Access Logic Layer" وإنما مباشرة مع طبقة البيانات "Database Layer" وحقيقة أن طريقة العمل بالطبقات تحتاج من 3 :4 أضعاف الوقت الأجمالي للمشروع مما يؤثر بشكل ما على الجانب التسويقي ، هذا بخلاف أن يكون ذو أثر ضعيف في المشاريع والتطبيقات صغيرة الحجم ومبالغ فيه .
- ولكن بلا شك نظام الـN-tier يحسن أداء التطبيق بشكل كبير وخاصه في التطبيقات الكبيرة لما تختص به كل طبقة من مهام وكذلك مرونه التعديلات على كل طبقة وفهمها واستخدامها في تطبيقات أخري مع التوثيقات اللازمه " documentation " وعدم الأحتياج إلى كتابة اكواد مكررة من جديد ، وكذلك في حال الرغبة في التمرد على الدفع مثلا لـ Microsoft SQL Server وارادة الدفع لـ Orcale فما عليك تغيير طبقة البيانات "Database Layer" وتعديل بسيط في طبقة التعامل مع البيانات "Data Access Logic Layer" دون المساس بأي شىء دون تعقيدات ، عليه فإن العمل بتلك الطريقة يوفر مكتبة اكواد قوية وتوفر في الوقت اجمالاُ.
- "Data Access Logic Layer" - classes - يمكن عملها بإستخدام TableAdapter Configuration دون الحاجه إلى كتابة أكواد.
- في طبقة الأعمال "Business Logic Layer" يمكن استخدام كنترول ObjectDataSource داخل Web formsليعرض مباشرة مخرجات الـMethods في كنترول خاصه بعرض البيانات مثل GridView.
- كذلك الـweb forms تحمل لنا ميزة عمل كاش" " advantage of caching من قواعد البيانات والذي يحسن من أداء التطبيق لانه يجعل لغة تواصل مع قواعد البيانات بمعنى لو حذف بند من قواعد البيانات فأنه سوف يختفي من عندك مباشرة .
وأخيرا .. نسأل الله التوفيق والاستفادة للجميع
أحمد

