كن واثقاً من كلامك وأنت تتحدث عن ASP.NET

تمهيد :-

كثير من الناس يتسائلون عن الفرق بين Web Forms و MVC ويوجد كثير من الخلط بينهم , وهل هم بدائل ؟, وماذا عن Web API ؟ وما هى SPA ؟ وماذا يعنى SignalR ؟ , هل كل هذا يعد ASP.NET ؟ , والكثير أيضاً يسأل , يقول أنا مبتدأ, بماذا أبدأ ؟, وغيره يقول, لا حاجة فى web Forms سأبدأ بتعلم MVC هذا هو الحديث, وغيره يقول, هل شرط أن أتعلم Web API بعد تعلم MVC ؟ , أم ماذا ؟ , الكثييير من الأسئلة التى سأحاول أن أضع إجابات مختصرة لها , والله المستعان .

Image

مقدمة :-

فى بداية الآمر, كنا لا نجد إلا ما يُعرف بـ ASP.NET فقط, حيث كنا نقوم بتعريفها, على أنها بيئة برمجية لتطوير تطبيقات الإنترنت والتى قمت بتقديم سلسلة دروس من ستة أجزاء كمقدمة تعريفية لها …وتوالت الإضافات على ASP.NET منذ نشأتها إلى يومنا هذا , حتى إزداد الأمر تعقيداً !, ففى ما يلى سأسرد لك هذة الإضافات والله المستعان.

 Web Forms

ظهرت العيوب على السطح , وإشتكى مجتمع المطورين من أمور عدة تفتقدها ASP.NET , بل وكان يحتقرها مطورى البيئات الأخرى مثال PHP وغيرها, والأسباب معروفة لدى الكل, وكانت الأسباب كالتالى:-

  • ASP.NET ليست إلا HTML Generator .

  • ASP.NET ليست إلا Drag-Drop , وليس لكم تحكم فى الـ HTML .

    • هذا الكلام يمكن أن يرد عليه بإنك تستطيع التحكم من خلال مرحلة الـ Rendering , وأيضاً من خلال الـ Source View, ولكن ليس بالقدر الكافى .

  • ASP.NET تمر بالعديد من الأحداث التى قد لا أحتاجها فى الكثير من الآوقات.

  • ASP.NET من الصعب إجراء Automation Testing عليها, إلا بمحاكاة HttpContext.

  • ASP.NET لا تتبع مبادئ ولا أنماط التصميم المتبعة فى تصميم البرمجيات, والتى نعرفها بإسم Design Patterns و Software Design Principles, ولعل التركيز الأكبر كان على مبدأ الفصل المعروف بإسم SOC.

  • ASP.NET , لا يوجد بها مرونة فى إمكانية إعادة الإستخدام و كذلك صيانة الكود .

كان الحديث كله يدور حول ASP.NET والتى باتت تعرف الأن بإسم Web Forms, أو ASP.NET Classic (ولاحظ إنى لا أقول ASP Classic بل أقول ASP.NET Classic ), وكان الهدف من وجود Web Forms بهذا الشكل, هو محاكاة تطبيقات الـ Event-Driven مثال Windows Form Application , فظلت المشكلة تنغص على مايكروسوفت فرحتها بإبداعاتها داخل Web Forms.

دورة فى ASP.NET Web Forms تتكون من 20 درساً  تجد التفاصيل هنـــــــــا

 MVC Framework

قرأت مرة أن Scott Guthrie حيث كان مدير قسم التطويرفى فريق ASP.NET حينها على ما أذكر , أنه كان مسافراً, وفى رحلته على متن الطائرة, فكر بتطبيق MVC Pattern داخل ASP.NET , حيث كان الجميع يتحدثون حينها عن هذا النمط (MVC) , وما يقدمه من مزايا فى العمل, رغم أن هذا النمط موجود من عشرات السنين, إلا أن الحاجة إليه باتت ملحة بالنسبة لمايكروسوفت , وذلك لإعجاب الكثيرين به عندما تم تطبيقه فى كثيرمن بيئات التطوير,فما كان من مايكروسوفت إلا أن تسعى لإيجاد حلاً لعلاج ذلك, فجائت له الفكرة, أن يقوم بتطبيق هذا النمط بإستخدام HttpHandler وHttpModule, ولكن كيف والنمط ينص على أن لكل صفحة مدير وحالة بيانات تنتقل منها وإليها, والصفحة هنا هى View والمدير هنا هو Controller وحالة البيانات هنا هى Model ,وهنا ستكون كل صفحة مصحوبة بـ Controller, ذلك الوصف قريباً مما يحدث فى aspx Page و Code-behind إلا أن الإثنان هنا لا يَعرفان بعضهما البعض, بمعنى إنهم غير مرتبطين ببعض كما فى aspx, أى أن الـ Controller لا يعرف شئ عن الـ View والعكس صحيح.

فظهرت الحاجة إلى وجود نمط آخر, يضمن وجود Controller لأكثر من View, فكانت فكرة تطبيق نمط آخر وهو Front Controller, وهو الذى ينص على وجود Controller واحد يخدم أكثر من View.

فأصبح لدينا نمطين أولهم MVC Pattern مبنى على الثانى وهو Front Controller Pattern .

 فكان نتاج هذا الأمر هو MVC Framework , والذى جاء ليعمل جنباً إلى جنب Web Forms, وليس بديل, وليس تحديث, وأعلنت مايكروسوفت من اللحظة الأولى لإنطلاقه, أنها ستدعم Web Forms ولن تتخلى عنه, ولكن قد قدمت لك طريقين لبناء تطبيقات إنترنت أحدهما Web Forms وثانيهما MVC , فأختر إيهما تسلك.

 وقد سألنى الكثيرون هذا السؤال لدى مشروع , فهل أستخدم Web Forms أم MVC ؟ “ ….. وتكون إجابتى دوماً بــ على حسب ” …فلابد أن تستجمع تركيزك لترد على هذة الإجابة بسؤال آخر , وهو على حسب ماذا؟ ” ……….. الحقيقة على حسب الكثيييير , ولكن سأسرد لك بعضها:-

  • إذا كنت تريد أن تتحكم أكثر فى HTML فعليك بـ MVC.

  • إذا كنت تريد أن تحصل على Re-usability أعلى , فعليك بـ MVC.

  • إذا كنت تريد أن تحصل على Maintainability أعلى , فعليك بـ MVC.

  • إذا كنت تريد أن تحصل على Testability أعلى , فعليك بـ MVC.

  • إذا كنت تريد Productivity أعلى مع إهمال ما سبق فعليك بـ Web Forms.

 ربما يقول قائل ماذا عن تطبيقMVP Pattern داخل Web Forms ؟ ”. مممم , حقاً تطبيق هذا النمط قد يجعل Web Forms تكسب كل هذة النقاط لمصلحتها…. الحقيقة, ربما, ولكن ما التكلفة ؟…………. التكلفة ستكون على حساب الـ Productivity وما سيأخذ ذلك التطبيق من وقت, حيث أن تطبيق MVP داخل Web Forms يتطلب عناءاً مع الوقت فى كتابة الكود, وقد قدمت مقالتين من قبل فى شرح هذا النمط وكذلك فى شرح Framework يسمى WebFormsMVP وكيفية إستخدامه.

 تلقيت سؤالاً أيضاً يقول أنا أريد أن أبدأ فى ASP.NET , هل أبدأ معWeb Forms أم MVC “ ……. التجربة أثبتت أنه لا فرق…………. إشترك فى دورة MVC معى يوماً مطوراً قادماً من PHP, وأخبرنى أنه إستطاع أن يقوم بإنشاء موقع كامل بعد الدرس الرابع, فلا شك أنه مجتهد,والشاهد من هذا, أنه لم يجد معاناةً فى التعرف على MVC مباشرةً دون العلم بـ Web Forms, فهذا جيد, فكل ما تريد فقط معرفته هو لغة البرمجة التى تستخدمها C#/VB, والبقية هو إجتهادك والله الموفق. هذة هى التجربة, أما عن رأيى , فلا أرى أى فرق, غير أن الفهم العميق لألية عمل MVC فيما وراء المشهد يتطلب معرفتك بـ ASP.NET Runtime وكيف تسير الآمور.

دورة فى ASP.NET MVC تتكون من 15 درساً , تجد التفاصيل هنــــــــــا

 ظهربعد ذلك ما يعرف بـ ASP.NET Web API .

Web API Framework

هى Framework لبناء Service مستندة فى عملها على ASP.NET وتستطيع الوصول إليها من خلال HTTP. بدايتها ظهرت مع WCF تحت إسم WCF Http Service, فبعيداً عن تعقيدات إعدادات (Configuration) WCF , كانت الحاجة لإستقلالها ومجيئها تحت إسم ASP.NET Web API, والهدف مازال واحداً وهو بناء Service قائمة على HTTP.

تم الإعتماد بشكل أساسى على MVC حينما قاموا بإنشاء Web API , حيث نجد أن آلية العمل واحدة , وعلى الرغم من أنى أتجنب الدخول فى ذكر تفاصيل آلية عمل كلاً منهما لإن هذا سيخرج بنا خارج الهدف من الموضوع وهو التعريف السطحى فقط, ولكن جدير بالذكر, أن نقول أن هناك تشابة كبير جداً بين MVC و Web API من حيث آلية العمل, ولكن تبقى لـWeb API أهدافها التى صممت من آجلها وهى :-

  • إذا أردت أن تقوم بتصميم خدمة (Service ) تعمل كمزود للبيانات فقط أو ما يسمى Data Point فعليك بـ Web API.

  • إذا أردت أن تقوم بتصميم خدمة تصل إلى كافة الأجهزة التى تملك إمكانية إرسال HTTP Request وإستقبال HTTP Response فعليك بـ Web API , ولاحظ أن ذلك يشمل , كافة الأجهزة الحديثة بإختلاف أنواعها من هواتف نقالة إلى أجهزة ذكية إلى مواقع إنترنت إلى تطبيقات سطح المكتب وغير ذلك .

  • إذا أردت مرونة فى العمل, ولا وجود لإى متطلبات غير HTTP فعليك بـ Web API.

  • إذا أردت أن تكون لديك خدمة تستطيع التفاوض حول المحتوى المطلوب, والمقصود هنا نوع البيانات على إختلاف أنواعها فعليك بـ Web API.

  • إذا أردت أن تتحكم بمرونة كافية فى طلبات العملاء (Http Requests ) والردود على هذة الطلبات (Http Response) فعليك بـ Web API , مما يجعلك وكأنك تتعامل مباشرةً مع HTTP.

 وقد سألنى أيضاً آخرون هل لابد من معرفتى بـ MVC حتى أتعرف على Web API ؟ ” …………. وإجابتى تكون…………. “الأفضل ذلك ولكن ليس شرطاً” ……. وذلك لمسته حقاً حينما كنت أقوم بشرح دورة فى Web API…….. فالإضافة التى ستجنيها من معرفتك أولاً بـ MVC , هى أنك, ستجد مرونة فى تقبل Web API بوقت أسرع, وذلك لسابق معرفتك ببعض الأمور المتشابة بين Web API و MVC .

 والسؤال الثانى … هل يمكن أن أقوم بإستخدام Web API مع Web Forms “ …….. إجابتى تكون نعم” …. وخذ فى إعتبارك أيضاً, أنه يمكنك أن تستخدمها فى Client -Applications.

 ساهمت Web API أيضاً فى جعل العمل مع Single Page Application أكثر مرونة .

دورة فى ASP.NET Web API  تتكون من 15 درساً , تجد التفاصيل هنــــــــــــا

SPA Concept

يأتى الإسم SPA إختصاراً لـ Single Page Application وهو مفهوم , وليسLibrary , وليس Framework, ويمكن أن نسميه إسماً آخر وهو JavaScript Application , أى تطبيق قائم على JavaScript, وكلمة SPA تخالف الواقع الذى يتم فيه تطبيق SPA, فالمعنى الحرفى هو, تطبيق الصفحة الواحدة, وهذا ليس واقعياً, فلاشك أن تقول, ربما تكون SPA لتطبيق يتكون من صفحة واحدة, أى تطبيق متناهى الصغر, الحقيقة لا!………. ولهذا نقول أن المعنى منافى للمراد, فالمعنى يقول تطبيق مكون من صفحة واحدة , والمراد, أن المستخدم سيتعامل مع التطبيق بصفحاته المتعددة وكأنه داخل صفحة واحدة لم يخرج منها, والمعنى لا يخفى عليك كمطور لتطبيقات إنترنت, فى أننا سنقوم بإخفاء Refresh, والعمل على إنشاء Data point على الخادم (Data point على سبيل المثال Web API ) ومن ثم نقوم بإستخدام أحد الـ Libraries أو Frameworks الخاصة بـ JavaScript للعمل داخل التطبيق , فعلى سبيل المثال , يمكن العمل مع AngularJs أو DurandalJs أو EmberJs أو غيرهم, أو ربما تفضل العمل مع مجموعة من المكتبات المنفصلة مثال KnockoutJs و SammyJs و RequireJs وغيرهم. والهدف من كل هذا, هو معالجة تفاعلات المستخدم من عرض البيانات التى يطلبها, أوإرسال للبيانات التى يُدخلها, وكذلك التنقل بين الصفحات, وغير ذلك من العمليات التى تتم فى التطبيق العادى, مع الأخذ فى الإعتبار, أن الذهاب إلى الخادم لن يكون إلا فى الضرورة,وأن كافة الأعمال فى التطبيق ستتم على الـ Client, يتطلب هذا إتباع طرق مختلفة لتحقيق هذا الهدف من تخزين للبيانات فى Cache وكذلك إستخدام Rendering Templates والطرق كثيرة وكل مطور يذهب فى الطريق الذى يعرف ويفضل, فالمجال مفتوح.

SignalR Library

فى البداية هى مكتبة أكواد جاهزة أحضرتها لك مايكروسوفت ,لتقوم بالعمل مع ما يعرف Real-time , والمعنى مختصراً, أن هذة المكتبة, تعمل على إرسال البيانات من جهاز الـخادم إلى جهاز العميل تلقائياً حينما تتوفر هذة البيانات, بإضافة آخرى…….. يمكن أن تقول, أنه بدلاً من أن يقوم المستخدم بطلب البيانات, سيقوم الخادم بإرسالها إليه متى كانت متاحة, وهذا الأمر, تجده ضرورياً فى التطبيقات التى تحتاج تحديث فورى للبيانات وكذلك دورى, وفورى معناه, أى فى نفس الوقت التى تتاح فيه, ودورى معناه , أى بشكل مستمر, أفضل مثال على إستخدامها, تطبيق المحادثة (Chat ) والذى لابد له أن يرسل لك البيانات التى أدخلها من يقوم بالمحادثة فى الطرف الآخر, كذلك تطبيقات الأسهم, والتى تحتاج إلى تحديث بأسعار الأسهم وإرتفاعها وإنخفاضها, فهذان مثالان يوضحان كيف أن SignalR تقوم بإرسال البيانات إلى جهاز العميل تلقائياً متى كانت متاحة دون أن يطلبها المستخدم.

Web Pages Framework

هى Framework لبناء صفحات إنترنت بسيطة, وجاءت لتوفر بيئة مبسطة لبناء هذة الصفحات بدون تعقيدات Web Forms أو غيرها, وتم إيجاد IDE بإسم WebMatrix وهو البرنامج الذى من خلاله تستطيع أن تقوم بإنشاء مثل هذة الصفحات, حيث تتكون الصفحة الواحدة من HTML ثابت ومحتوى يتغير من خلال الكود فى نفس الصفحة, مستخدماً فى ذلك Razor Syntax, وهذا لمن يريد أن ينشأ صفحات إنترنت بسيطة بدون سابق معرفة بـ ASP.NET , ولا ولن يحتاج أن يعرف عنها شئ .

الختام

فى النهاية , ليس هناك بديل لشئ, إنما الكل يعمل لديك, وكلها أدواتك, وهناك أوقات سيتم فرض العمل مع أحدهم عليك رغماً عنك, فلا غنى لك عن تعلم الجميع, على سبيل المثال, قد يأتيك تطبيقاً تم إنشائه بـ Web Forms منذ زمن, وتم طلب تعديلات أو ربما تحديثات, فهل يعقل, أن تخبر العميل, أو حتى المدير, أن نقوم بترقية التطبيق وإنشائه من الصفر ولكن بـ MVC, هذا غير وارد فى الأصل, وكذلك العكس, وربما كنت فى Web Forms فعلاً, ولديك إضافة تتطلب تحديث فورى للبيانات, فعندها SignalR تفى بالغرض, أو ربما تحتاج إلى Data Point داخل Web Forms, أو قد تحتاج إلى Service تقبل الإتصال من خلال HTTP لتدعم العديد من انواع الـ Clients, فحينها Web API هو الحل الأمثل.

خلاصة الأمر لا غنى لك بواحدة عن الآخرى, أنت فقط توظف معرفتك حيث تحتاجها.

 سأحاول أن أوضح كيف تعمل كلاً منهم , متعمقين فى ما يحدث وراء المشهد وذلك فى مقالات منفصلة فى أقرب وقت إن شاء الله.

 هذا وبالله التوفيق .

المراجعة :-
أتوجه بالشكر لـكلاً من “محمد مليجى” والذى تستطيع أن تصل إليه من خلال @meligy على تويتر,  و”محمد الشريف” والذى تستطيع أن تصل إليه من خلال @bashmohandes على تويتر أيضاً , على إعطائنا من وقتهم الثمين للمراجعة بعد النشر .

10 thoughts on “كن واثقاً من كلامك وأنت تتحدث عن ASP.NET”

  1. كلامك جميل جدا ،
    لكن حضرتك بتتكلم عن الـ ASP وبتفتخر بيها
    وللأسف بتستخدم Open source في مدونتك
    حضرتك مش شايف إنها في قمة التناقد ،

    تحياتي

    1. شكراً على تعليقك , لكن دعنى أوضح لك التالى:-
      ASP.NET أصبحت Open Source , إليك الرابط التالى :-
      http://www.asp.net/open-source
      الأمر الثانى , أننى بالفعل لدى مدونة على ASP.NET لكن بالإنجليزية :-
      http://weblogs.asp.net/ahmedmoosa/

      الأمر الأخير :- أنا مبرمج ويبدو أنك مبرمج أيضاً , وفى النهاية الكل أدواتك , ولن أقع فى فخ بعض الحمقى الذين يتعصبون لأداة أو لغة ما , لإنهم لا يدركون أن جميع اللغات والأدوات صنعت من أجل المبرمج ليفعل بها ما يشاء, فإكتب كود باللغة التى تريد وإكتب كود فى البيئة التى تريد وبالأداة التى تريد ……………. إذا كنت مبرمج , فعالم التكنولوجيا ملكاً لك .
      شكراً مرة آخرى للسماح لى بالتحدث عن هذا الموضوع .

  2. مقالة رائعة و غنية
    و أنا حزينة و الله لعدم قدرتي للاشتراك في الدورة القادمة بسبب انشغالي هذه الفترة..
    أسعد جدا عندما تصل هذه المقالات على بريدي
    جزاك الله خير و زادك علما

  3. بارك الله بك أستاذي الكريم, و الله يعلم كم أدعو لك في ظهر الغيب
    وكم أتمنى لو لدي الوقت لأشترك معك في دورات أخرى …. بالتوفيق

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s