فریم وورک Dotnet Core

مایکروسافت، اوایل سال 2002، اولین نسخه ی NET Framework. را منتشر کرد. یک framework توسعه ی نرم افزار، که فقط با windows کار می کند و امکان مدیریت حافظه، امنیت، مدیریت خطا (Exception handling) و بسیاری امکانات دیگر را فراهم می کند.

دات نت (NET Framework.)، تعداد زیادی کتابخانهدارد که انجام کارهای بسیاری، از parse کردن xml تا http request را برای برنامه نویس ها راحت تر می کند. علاوه بر این ها، وجود زبان میانی یا IL، باعث می شود زبان های مختلف تحت NET. بتوانند از library های یکدیگر استفاده کنند.

همه ی این موارد در NET Core. هم وجود دارد.

در سال 2016، مایکروسافت همزمان با تصاحب Xamarin، از NET Core. رونمایی کرد. همان موقع به این فکر افتاد که شاید بتوان کاری کرد، که همه ی نرم افزارهایی که با Net. پیاده سازی می شوند، بتوانند library ها را به اشتراک بگذارند. بنابراین Net Standard Library. و Common infrastructure معرفی شدند.

هر سه DotNET Framework و DotNET Core و Xamarin، یک استاندارد به اسم DotNET Standard Library را پیاده سازی می کنند
هر سه DotNET Framework و DotNET Core و Xamarin، یک استاندارد به اسم DotNET Standard Library را پیاده سازی می کنند


ویژگی های مهم NET Core.

  • دسترسی وسیع تر به library ها:

با استفاده از NET Core. می توان با NET Standard Library.، اپلیکیشن یا library هایی توسعه داد که روی همه ی پلتفرم ها قابلیت اجرا داشته باشد. یعنی همان library که روی تبلت یا موبایل اجرا می شود، روی دسکتاپ، web server یا به عنوان یک backend service هم قابل استفاده باشد.

در واقع به جای این که برای IOs و Android و Windows، اپلیکیشن های جداگانه توسعه بدهیم، می توانیم یک اپلیکیشنِ قابل استفاده روی تمام این platform ها بنویسیم.

  • استقرار (Deployment) ساده روی پلتفرم های مختلف:

قبلا، نصب محصولات مایکروسافت روال پیچیده ای داشت. کامپوننت های COM، رجیستری، فولدرهای خاص، GAC، که همگی مخصوص ویندوز بودند. NET Framework. هم به این ساختار وابسته است. به همین دلیل در زمانِ نصبِ یک نرم افزار که با NET Framework. نوشته شده، Installer باید از وجودِ نسخه ی مناسب NET Framework. روی سیستم عامل اطمینان حاصل کند. و اگر نسخه ی مناسب نصب باشد هم، باز ممکن است بعضی ویژگی های مورد نیاز نرم افزار، مثل IIS یا کامپوننت هایWCF موجود نباشند. همچنین ممکن است برنامه نویس، زمان تست نرم افزار با یک Patch از NET Framework. کار کرده باشد، ولی در محیط عملیاتی، Patch دیگری موجود باشد و عملکرد نرم افزار دچار مشکل شود.

ولی در صورتی که از NET Core. استفاده کنیم، طراحی ماژولار به کمک ما خواهد آمد. یعنی فقط وابستگی هایی را که مورد نیاز نرم افزار هستند، در همان folder که فایل های نرم افزار قرار می گیرد قرار می دهیم. پس عملیاتِ پابلیش، فقط شامل کپی کردن یک folder در سیستم مقصد است! این همان مفهومی است که مایکروسافت، xcopy-deployable می نامد.

یک مزیت دیگه آن هم این است که امکان اجرای چند نسخه از نرم افزار، در کنار هم، روی یک سرور به راحتی مهیا است.

  • کانتینرها و cloud

سیستم های could، سعی می کنند با استفاده از سخت افزار کمتر، به مشتری های بیشتری سرویس دهند. قبلا، برای استقرار یک نرم افزار در سیستم cloud، از virtual machine استفاده می شد. این روش مشکلاتی داشت:

  1. سایز بالای فایل های virtual machine
  2. زمانِ طولانیِ startup
  3. استفاده ی زیاد از memory (کل سیستم عامل باید در memory بارگزاری شود)
  4. ناسازگاری (با این که امکان کپی کردن virtual machine روی یک host دیگر وجود دارد، ولی هیچ تضمینی نیست که درست مثل قبل رفتار کند)

کانتینرها این مشکل را با virtualize کردن سیستم عامل حل کرده اند. در نتیجه کانتینر، فقط شامل اپلیکیشن و وابستگی های آن می باشد. بنابراین سایز فایل ها خیلی کمتر و startup خیلی سریع تر است، فقط اپلیکیشن در memory بارگزاری می شود و کانتینر روی هر host که قرار بگیرد، دقیقا مثل قبل عمل می کند.

طراحی NET Framework. به گونه ای بوده که با کانتینتر ها خوب کار نمی کند ولی NET Core. به دلیل طراحی ماژولار، مناسب قرار گرفتن در یک کانتینر و پابلیش شدن هست.

  • پرفورمنس بالای ASP.NET Core

در سال 2002، اولین نسخه ی ASP.NET برای ساختن اپلیکیشن های وب منتشر شد. با وجود موفقیت بالا (که در پروژه های بزرگ مثل Stack Overflow استفاده شد) ولی به علت پرفورمنس پایین، مورد استفاده ی برنامه نویس های محدودی قرار گرفت.

---از طرفی، یک کمپانی به نام TechEmpower وجود دارد که چند ماه یک بار، یک benchmark از framework های تحت وب منتشر می کند. در خروجی های این کمپانی، ASP.NET جایی نداشت، چون این benchmark در لینوکس اجرا می شود ولی NET Framework. با ویندوز سازگار است. البته چند بار ASP.NET MVC را وارد این benchmark می کنند، ولی آنقدر پرفورمنس پایینی داشته (50 هزار RPS در مقابل 320 هزار RPS که مربوط به Node.js بوده است) که در بین رقبا حرفی برای گفتن نداشته است.

برای ASP.NET Core، این عدد به 1 میلیون RPS رسید.

  • کدباز بودن (Open source)

قبلا، مایکروسافت، درباره ی اطلاعات مربوط به محصولات و فیچر های در حال توسعه ی خود خیلی بسته عمل می کرد. دلایل خوبی هم برای این رویکرد وجود دارد:

  1. رقبا نمی توانستند همزمان با مایکروسافت روی این ویژگی ها و محصولات کار کنند. چون تا زمانی که مایکروسافت آن فیچر را عرضه نکرده بود، هیچ کس اطلاعی از آن نداشت.
  2. اگر پیاده سازی یک فیچر طول می کشید و به زمان بندی نمی رسید، هیچ کس متوجه این تاخیر نمی شد.
  3. مایکروسافت همیشه در کنفرانس ها اخبار جدید برای انتشار داشت.

ولی برنامه نویس های مدرن آنقدر صبور نیستند که برای یک فیچر، تا release بعدی (که شاید یک سال طول بکشد) صبر کنند. مخصوصا با وجود پروژه های open source بسیاری که پاسخگوی نیازشان است. بنابراین، مایکروسافت تصمیم به تغییر رویکرد گرفت.

در اولین قدم، source مربوط به NET Framework. منتشر شد. چند سال است که این source روی این لینک و GitHub در دسترس است.

ولی برای برنامه نویس ها، فقط دیدن کد کافی نیست، آن ها تمایل دارند در طراحی و توسعه مشارکت کنند.

به همین دلیل، کد NET Core. روی GitHub در دسترس عموم قرار گرفت و هر کسی امکان ثبت درخواست pull روی آن دارد. همچنین تیم ASP.NET Core هر هفته جلسه های standup برگزار می کند. بنابراین مایکروسافت یک رویکرد کاملا جدید در برابر open source در پیش گرفت.

  • امکان استفاده از ابزارهای گوناگون

از آنجا که NET Core. روی پلتفرم های بسیاری کار می کند، امکان کار کردن با command-line اهمیت پیدا کرد، برای مثال، برای کار کردن با لینوکس و یا کانتینرهای Docker تنها ابزاری که در اختیار داریم یک terminal است. بنابراین NET Command-Line Interface. یا CLI به وجود آمد. در نتیجه، علاوه بر این که می توانیم از IDE قدرتمندی مثل Visual Studio برای توسعه نرم افزار استفاده کنیم، می توانیم با یک text editor ساده مثل emacs توسعه دهیم و با CLI کد را build و run کنیم.

خلاصه

صنعت نرم افزار پیوسته در حال تکامل است، از متدولوژی تا framework تا ابزار، همه در حال بهتر شدن هستند. برای این محیط رقابتی، NET Framework. خیلی صلب و انعطاف ناپذیر است ولی NET Core. به همه ثابت کرد که مایکروسافت، هنوز هم، در توسعه ی نرم افزار مدرن، قابل رقابت با دیگران است.

خلاصه ی مزایایی که درباره ی NET Core. گفته شد:

  • قابلیت نوشتن library هایی که می توانند روی framework ها و سیستم عامل های گوناگون کار کنند
  • امکان deployment ساده روی کانتینرها
  • قابلیت نوشتن وب اپلیکیشن با performance بالا با استفاده از ASP.NET Core
  • پشتیبانی قوی CLI، در نتیجه برنامه نویس ها محدود به ابزار خاصی نشده و می توانند از ابزار مورد علاقه ی خود برای توسعه ی نرم افزار، استفاده کنند.

منبع : ویرگول