السلام عليكم
في هذا الدرس سوف نشرح اساس الASP.NET MVC ونتقدم قليلا في الموضوع
ماذا تعني MVC?
MVC هي اختصار لثلاثه كلمات هو Model View Controller وتعني اسلوب وهيكل قديم جديد في تصميم التطبيقات ، هذا الهيكل يركز على فصل تام للBuisness Layer عن الUser Interface ،اي عندما تكتب تطبيق في الAsp.net بدون استعمال صفحه الCode Behind ، في السنوات السابقه اثبت نجاحه في تطبيقات الويب ولذلك ذهب سكوت جو الى الRuby on rail ولغات اخرى وعاد لنا بAsp.net MVC .
لماذا اتعلم الMVC ?!
1 ) لانها سهله ومرنه
2) لانها تعطيك حريه اكبر في التعامل مع الواجهه
3) لانها وسيله سهله لانتقال سلس الى كل جديد في تطبيقات الويب مثل Silverlight , Flash , Html5
4) سهوله اكبر في التعامل مع الاجاكس
5) سهوله اكبر في بناء تطبيقات معقده وكبيره اكثر
6) ارتب وانظف
ماذا سأخسر في انتقالي الى الMVC?
1) لا يوجد PostBack
2) لا يوجد ادوات مثل DataGrid , Repeater,...
3) لا يوجد ViewState
ملاحظه : الكثير يعتبرون هذه ايضا حسنات الMVC ومع الوقت سوف تعرف السبب.
ما هي وظائف الModel View Controller:
Model : المودل يمثل مصادر المعلومات الي التطبيق وهو تقريبا يمكن ان يسمى Data Access Layer ـ اي وظيفته ان يتعامل مع البيانات بدون التحديد اي مصدر بيانات ( على الاغلب تكون قاعده بيانات) ، اي ان المودل يسترجع البيانات من المصادر ويتعامل معها وايضا يحصل على المعلومات من الController ويتعامل معها والعكس صحيح.
Controller : الكونترولير هو كلاس وهوالمسؤول عن التعامل مع الواجهه(User Interface) اي صفحات الAspx ، الكونترولير عباره عن دوال وهو المسؤول عن تحديد اي صفحة Aspx سوف يعرض .
Views : هي عباره طبعا عن صفحات الAspx والكنترولير هو الذي يستدعيها بناءا على الURL.

(الرسم من جوجل :happy: (
هذا الرسم يمثل التصميم الاساسي للMVC بشكل عام ، ولكن سنعتبره الرسم الخاص في الASP.NET MVC
عند طلب رابط لا يتم الذهاب مباشره الى الView اي صفحات الaspx ولكن سوف يقوم بالانتقال الى الroutes
routes هي عباره عن قوالب تمثل الروابط ، عندما يتم طلب صفحه سوف يتم نسخ الرابط وملائمة الى مجموعه من الroutes لايجاد الroute الملائم تم يتم تقسيم الرابط والتعامل معه، لنأخذ مثال من الASP.NET MVC
نذهب الى الفيجوال ستوديو ونقوم بانشاء مشروع جديد ، اقرا الموضوع اذا كنت لا تجيد انشاء مشروع MVC
عند انشاء المشروع نذهب الى ملف Global.Asax في هذا الملف يوجد داله RegisterRoutes
في هذه الداله يوجد قسمين الاول يستدعي داله اسمها IgnoreRoute هذه داله تقول للHandler "تجاهل" الورابط التي تأتي وتحاول طلب ملف ينتهي بامتدادaxd مهما يكون اسم الملف او وجود اي بارمتر يتبعه
القسم الثاني من الداله يقوم بتسجيل الroutes هذه "القوالب " للروابط وعند طلب رابط يقوم التطبيق بمقارنه الرابط مع القوالب المسجله ليقرر اي route سوف يقوم باستدعاء
عندما نقوم بانشاء مشروع سوف يتواجد route واحد ، يمكن اعتبار هذا القالب هو القالب الرئيسي الذي يمكن استخدامه ليخدم الكثير من الحالات في التطبيق
القالب يقول كالتالي: ننتظر 3 متغيرات في الرابط سوف تأتي بالترتيب التالي :
"{controller}/{action}/{id}"امثله على الروابط التي تطابق هذا القالب:
www.MywebSite.com/Product/Details/1
www.MywebSite.com/Users/Show/5
www.MywebSite.com/Product/List
لم افهم كيف؟!
بما ان القالب يطابق الرسم اي يوجد 3 متغيرات ، هذا العدد في الرابط كأن الRoutes يظهر للتطبيق ان شكل الروابط الحقيقي هو :
www.MywebSite.com/?Controller=Product&Action=Details&Id=1
www.MywebSite.com/?Controller=Users&Action=Show&Id=5
www.MywebSite.com/؟Controller=Product&Action=List
ولكن لماذا يقبل الرابط الاول ؟! لا يوجد فيه قيمه للId اي لا يناسب القالب!
نعم ولكن الرابط هو مطابق مادام هنالك مكان فيه للمتغيرات التي تأتي معه ( سنرى لاحقا كيف نضع المزيد من الشروط)
اذا ماذا سيفعل مع المتغير ؟!
سوف يضع القيمه المعرفه في القسم الثالث من تعريف الRoute كما هو موضح في الصوره اي ستكون القيمه فارغه ولكن ليس null
دقائق واكمل القسم الثاني من الجزء الاول -_-

