تعرف على ASP.NET Core

مقدمة :-

فى هذا المقال, نقوم بالتعرض لعدة نقاط نقوم من خلالها بالتعرف أكثر ASP.NET Core, وتوضيح بعض الإشكالات حولها مثال :-

  • إصدار جديد أم طريقة جديدة ؟

  • هل حان الوقت للإنتقال إلى ASP.NET Core ؟

  • .NET Core أم Full .NET Framework ؟

  • ماذا أستفيد من ASP.NET Core ؟

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

إصدار جديد أم طريقة جديدة ؟

فى البداية كانت تسمى ASP.NET 5, بإعتبار أنها الإصدار الأحدث من ASP.NET, ولكنها فى الأصل هى إعادة تصميم لـ ASP.NET, حيث تم إحداث تغييرات فى البنية التحتية, فلم تعد تعتمد فى عملها على System.Web.dll , مما يمكنها من الإنفصال عن IIS, والعمل على بيئات عمل مختلفة مثل Mac و Linux. إضافة إلى أنها فى حد ذاتها صممت على أن تكون برنامج Console Application يقوم بإنشاء Web Server داخل الـMain الخاصة به, نعم, ASP.NET 5 هى Console Application يقوم بإنشاء Web Server, ليتولى هذا الويب سيرفر فيما بعد الرد على الطلبات الموجه إليه. ومن هنا يتضح لنا أنها ليست الإصدار الأحدث, وإنما هى طريقة جديدة لتطوير المواقع باستخدام ASP.NET, فلم يعد إسم ASP.NET 5 مناسباً فاصبحت تسمى ASP.NET Core.

هل حان الوقت للإنتقال إلى ASP.NET Core ؟

بدايةً, ASP.NET Core , هى Framework , مفتوح المصدر , يقبل العمل على أكثر من بيئة عمل, مثل Windows و Mac و Linux . ويقبل العمل هنا نقصد بها التطوير والنشر(الإستضافة), نعم, تستطيع أن تقوم بتطوير/إنشاء موقع وكتابة أكواده على نظام تشغيل أخر غير الويندوز, فقط من خلال محرر نصوص بعيداً عن Visual Studio, وبالطبع يمكنك إستضافة هذا الموقع على أنظمة تشغيل مختلفة.

كان هذا هو الهدف, أن تكون ASP.NET موجهه إلى أنظمة التشغيل المختلفة, ولكن كانت العقبة فى إعتمادها على ويندوز وتحديداً .Net Framework, فكان ولابد من تغيير التبعية لـ ASP.NET ولكن كيف؟ هل يتم إحداث تغيرات جذرية فى .NET Framework أم هل يتم إستبداله ؟ إحداث تغييرات جذرية فى framework يعيش منذ 2002, وهناك العديد من التطبيقات التى تعتمد عليه, وفى النهاية ماذا سيحدث فى تبعيته لـويندوز ؟!!!. أظن هذا صعب. وكان الخيار الثانى, وهو إعادة تصميم لـ.NET Framework تحت إسم آخر وهو .NET Core ليحل مشكلة التبعية لـ IIS وويندوز و .NET Framework, ولكن ظهرت مشكلة أخرى, هل سيتم إعادة تصميم لجميع أجزاء .NET Framework مثل WinForms , WebForms, MVC , WebAPI , WCF , WPF وغيرهم , أيضاً لا ننسى FCL , تلك المكتبات الجاهزة مثل System.NET و System.Drawing وغيرهم كثييير, وهل ستتخلى مايكروسوفت عن كل شئ داخل دوت نت ليكون Open-Source ؟,ربما مستقبلاً ولكنه لم يحدث حتى الأن.

أيضاً لا ننسى, المكتبات التى لا حصر لها والموجودة هنا وهناك والتى تسمى Third-Party المملوكة لشركات وأفراد ومجموعات, كل هذة المكتبات تعتمد فى النهاية على .NET Framework, على سبيل المثال, AutoMapper و ImageResizer و JSON.NET و غيرهم كثيييير. فهل سيتم إعادة تصميم جميع هؤلاء ليقبلوا العمل على .NET Core. فى الحقيقة, قد يحدث هذا مع الوقت, وبالفعل تمت إعادة بناء البعض إعتماداً على .NET Core, مثال MVC , Web API و Entity Framework إضافة ً إلى مكتبات وأدوات خارج مايكروسوفت أيضاً, ولكن نحن نتحدث عن 14 عام من التطوير لـFramework, ومكتبات تعمل معنا منذ سنوات, أظن الأمر سيأخذ بعض الوقت ليكون Core إختيارك الأمثل لبناء تطبيقات كبيرة.

ولكن أود أن ألفت إنتباهك إلى شئ,وهو, نعم قد لا يدعم .NET Core بعض المكتبات والأدوات فى الوقت الحالى, ولكن هناك بدائل مدفوعة ,كإستخدام Service بمقابل مادى تؤدى نفس الغرض المطلوب. فعلى سبيل المثال, مع .NET Core , لن تجد SMTP أو System.Drawing بكامل إمكاناته, ولكن كما ذكرنا هناك بدائل لكلاً منهما بمقابل مادى, وهنا يأتى دورك فى تحديد متطلباتك؟

والسؤال الذى يجب أن تسأله لنفسك إذا أردت أن تنتقل إلى .NET Core الأن ؟ هل يدعم .NET Core الأدوات والمكتبات التى أعمل بها فى الوقت الحالى؟, وأنت من سيجيب على هذا السؤال, و ستعرف الإجابة عند زيارة مواقع هذة الأدوات والمكتبات التى تعمل بها وترى التوثيق وترى هل هناك نسخة تدعم .NET Core أم لا .وعندها تحدد هل تكمل فى الطريق أم تجعله قرارك فى المستقبل إن شاء الله.

.NET Core أم Full .NET Framework ؟

جاءت ASP.NET Core مع إمكانية إختيار الـFramework الذى تريد العمل به, حيث يمكنك استخدام أحد إختيارين :-

  • Full .NET Framework

  • .NET Core

netcore

فالأول, هو من نعمل معه منذ بداية ASP.NET بكامل إمكانياته, مثال Web Forms و Win Forms و WCF و WPF وغيرهم, وهو Framework مكتمل ومستقر, ولكنه موجه فقط إلى نظام التشغيل Windows. وتحدثنا عن هذا من قبل, ولكن ما نريد أن نقوله هنا, هو, أنك تستطيع بناء تطبيق ASP.NET Core بإستخدام Full .NET Framework………….. لكنك لم تذهب بعيداً, مازلت تستهدف Windows. أما الثانى, فسيكون إختيارك حينما تريد بناء تطبيقات ASP.NET Core تعمل على أنظمة تشغيل مختلفة.وإلى هنا يأتى السؤال التالى :-

ماذا أستفيد من ASP.NET Core ؟

جاءت ASP.NET Core بالعديد من المزايا, حيث تم إعادة تصميمها من جديد فأتاح ذلك إحداث الكثير من التغيرات منها التالى :-

  • إعتمادها على مجموعة من المكتبات البرمجية المستقلة التى يمكنك إضافة ما تحتاج منها فقط (من خلال Nuget ).

  • بيئة عمل موحدة, حيث تم الدمج بين MVC و Web API فلا حاجة لمزيد من ضبط للإعدادات لكلاً على حده, فأصبح لديك Controller واحد يعمل مع UI و API.

  • بناء ونشر التطبيقات على أنظمة تشغيل مختلفة,مثل Windows وMac و Linux. فسواء كان لديك visual Studio أم لا , فهناك بدائل لبناء تطبيقات باستخدام ASP.NET Core, تستطيع أن تستخدم محرر النصوص المناسب لك, مثال Sublime أو Brackets أو محرر النصوص المتطور القادم من مايكروسوفت Visual Studio Code والذى يعمل على أنظمة تشغيل مختلفة, ومؤخراً, أصدرت مايكروسوفت نسخة من Visual Studio لنظام التشغيل Mac.

  • إمكانية نشر أكثر من إصدار جنباً إلى جنب, بمعنى, أنه يمكنك نشر تطبيق يستخدم .NET Core 1 بجانب تطبيق آخر يستخدم .NET Core 2 وهكذا فى نفس المكان, وذلك لإنك تقوم بنشر التطبيق محتوياً على .NET Core Runtime , وعليه, فإن كل تطبيق يقوم بالعمل على إصدار الـ Runtime المرفق معه, ولا يؤثر أحدهم على الأخر.

  • السرعة , حيث تم إنشاء طريق جديد يمر به الـrequest , فلم يعد هناك HttpModules أو HttpHandlers , فقد تم إستبدالهما بما يعرف بـ Middleware, وأيضاً لا وجود لـ Application Life Cycle , فقط يمر الـRequest بمجموعة من الـ Middleware , أنت من يقوم بتحديد ماذا تريد أن تستخدم منها وكذلك ترتيبها فى أغلب الأحيان وذلك لإنك ستجد بعض الـ Middleware تعتمد فى عملها على أخرى, فقد يلزم الترتيب فى البعض. ونخرج من Middleware إلى Kestrel وهو Web server جاء مع ASP.NET Core .وهو المسئول عن تلقى الطلبات وتمريرها إلى Middleware, وعلى الرغم من سرعته فى تلقى الطلبات والرد عليها, إلا إنه بالإمكان إستبداله بـWeb Server آخر. ولكن توصى مايكروسوفت بإستخدامه تحت سيرفر أخر مثال IIS أو Apatche أو Nginx وذلك لضمان مزيد من الحماية, وهذا للأسف فى الوقت الحالى يحد من سرعة Kestrel, ولكن قد يتحسن ذلك مستقبلاً إن شاء الله .

  • دمج العديد من الأدوات معها مثال gulp و grunt كأدوات تستخدم كـ Task Runner وbower كـ Package Manager.

    و لمن لا يعرف Task Runner هو أداة لتنفيذ بعض المهام بشكل تلقائي, وهذة المهام هى أعطاء الأمر لأدوات أخرى بالعمل , هذة الأدوات تقوم بالكثير على سبيل المثال : ترجمة ملفات SASS و LESS والتى ينتج عنهما ملف CSS وكذلك ترجمة ملفات TypeScript والتى ينتج عنها ملف JavaScript, أيضاً لا ننسى عملية الـ Bundling, وهى عملية تجميع أكثر من ملف داخل ملف واحد , كذلك تنفيذ عملية الـ Minification, و هى عملية تقليل حجم الملف إلى أصغر حجم ممكن, وهاتين العمليتين يمكن أن يتما مع ملفات CSS و JavaScript والهدف منهما إضافة المزيد من السرعة فى التحميل. فبدلاً من طلب خمسة ملفات كلاً على حده يمكن دمجهم فى ملف واحد, وكذلك بدلاً من طلب ملف بحجم 15KB يمكن تقليل حجمه إلى 8KB كمثال, وهذا من شأنه إضافة المزيد من السرعة فى التحميل.

ولمن لا يعرف bower فهو مثله مثل Nuget يعد كـPackage Manager ولكنه خاص بالويب مثال تحميل ملفات CSS و JavaScript وfonts, ولكن Nuget فهى تشمل .NET Libraries إضافة إلى JavaScript أيضاً, والفرق هنا, أن bower بها العديد من المزايا الإضافية للتحكم أكثر فيما تقوم بتحميله .

وللمزيد من التفاصيل حول ASP.NET Core يمكنكم مراجعة التوثيق الرسمى من هنـــــــــا


وفى الختام , نسأل الله للجميع التوفيق .

أضف تعليقاً

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

WordPress.com Logo

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

صورة تويتر

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

Facebook photo

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

Google+ photo

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

Connecting to %s