از ماه نوامبر سال 2020، مایکروسافت پسوند Core را حذف کرد و NET 5. را عرضه کرد. در این مقاله، برای تاکید روی تفاوت NET Framework. و NET. (نسخه ی آخر NET Core. سابق)، از عبارت NET Core. استفاده خواهد شد.
یاد گرفتن یک framework جدید برای توسعه ی نرم افزار، هزینه های زیادی دارد. باید یاد بگیریم که چطور بنویسیم، build کنیم، تست کنیم، پابلیش بدهیم و نگهداری کنیم.
بنابراین تصمیم گیری در زمینه ی مهاجرت به یک platform جدید، نیازمند بررسی مزایای آن است. در این نوشته از دو جهت این مساله بررسی خواهد شد:
قطعا به نفع شماست که به NET Core. مهاجرت کنید. البته احتمالا بعضی از قسمت های کد که وابسته به component های ویندوز هستند، به درستی کار نمی کنند و باید بازنویسی شوند.
اما موارد زیر باعث می شود مهاجرت به صرفه باشد:
باز هم به نفع شماست که NET Core. را انتخاب کنید. با این که که NET.، بعد از cross-platform شدن، با رقبای زیادی دست و پنجه نرم می کند، ولی هنوز هم برگ های برنده ای دارد:
بهتر است ابتدا با NET Framework. شروع کنیم:
مایکروسافت، اوایل سال 2002، اولین نسخه ی NET Framework. را منتشر کرد. یک framework توسعه ی نرم افزار، که فقط با windows کار می کند و امکان مدیریت حافظه، امنیت، مدیریت خطا (Exception handling) و بسیاری امکانات دیگر را فراهم می کند. همچنین تعداد زیادی library دارد که انجام کارهای بسیاری، از parse کردن xml تا http request را برای برنامه نویس ها راحت تر می کند. علاوه بر این ها، وجود زبان میانی یا IL، باعث می شود زبان های مختلف تحت NET. بتوانند از library های یکدیگر استفاده کنند.
همه ی این موارد در NET Core. هم وجود دارد.
در سال 2016، مایکروسافت همزمان با تصاحب Xamarin، از NET Core. رونمایی کرد. همان موقع به این فکر افتاد که شاید بتوان کاری کرد، که همه ی نرم افزارهایی که با Net. پیاده سازی می شوند، بتوانند library ها را به اشتراک بگذارند. بنابراین Net Standard Library. و Common infrastructure معرفی شدند.
با استفاده از NET Core. می توان با NET Standard Library.، اپلیکیشن یا library هایی توسعه داد که روی همه ی پلتفرم ها قابلیت اجرا داشته باشد. یعنی همان library که روی تبلت یا موبایل اجرا می شود، روی دسکتاپ، web server یا به عنوان یک backend service هم قابل استفاده باشد.
در واقع به جای این که برای IOs و Android و Windows، اپلیکیشن های جداگانه توسعه بدهیم، می توانیم یک اپلیکیشنِ قابل استفاده روی تمام این platform ها بنویسیم.
قبلا، نصب محصولات مایکروسافت روال پیچیده ای داشت. کامپوننت های COM، رجیستری، فولدرهای خاص، GAC، که همگی مخصوص ویندوز بودند. NET Framework. هم به این ساختار وابسته است. به همین دلیل در زمانِ نصبِ یک نرم افزار که با NET Framework. نوشته شده، Installer باید از وجودِ نسخه ی مناسب NET Framework. روی سیستم عامل اطمینان حاصل کند. و اگر نسخه ی مناسب نصب باشد هم، باز ممکن است بعضی ویژگی های مورد نیاز نرم افزار، مثل IIS یا کامپوننت هایWCF موجود نباشند. همچنین ممکن است برنامه نویس، زمان تست نرم افزار با یک Patch از NET Framework. کار کرده باشد، ولی در محیط عملیاتی، Patch دیگری موجود باشد و عملکرد نرم افزار دچار مشکل شود.
ولی در صورتی که از NET Core. استفاده کنیم، طراحی ماژولار به کمک ما خواهد آمد. یعنی فقط وابستگی هایی را که مورد نیاز نرم افزار هستند، در همان folder که فایل های نرم افزار قرار می گیرد قرار می دهیم. پس عملیاتِ پابلیش، فقط شامل کپی کردن یک folder در سیستم مقصد است! این همان مفهومی است که مایکروسافت، xcopy-deployable می نامد.
یک مزیت دیگه آن هم این است که امکان اجرای چند نسخه از نرم افزار، در کنار هم، روی یک سرور به راحتی مهیا است.
سیستم های could، سعی می کنند با استفاده از سخت افزار کمتر، به مشتری های بیشتری سرویس دهند. قبلا، برای استقرار یک نرم افزار در سیستم cloud، از virtual machine استفاده می شد. این روش مشکلاتی داشت:
کانتینرها این مشکل را با virtualize کردن سیستم عامل حل کرده اند. در نتیجه کانتینر، فقط شامل اپلیکیشن و وابستگی های آن می باشد. بنابراین سایز فایل ها خیلی کمتر و startup خیلی سریع تر است، فقط اپلیکیشن در memory بارگزاری می شود و کانتینر روی هر host که قرار بگیرد، دقیقا مثل قبل عمل می کند.
طراحی NET Framework. به گونه ای بوده که با کانتینتر ها خوب کار نمی کند ولی 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 رسید.
قبلا، مایکروسافت، درباره ی اطلاعات مربوط به محصولات و فیچر های در حال توسعه ی خود خیلی بسته عمل می کرد. دلایل خوبی هم برای این رویکرد وجود دارد:
ولی برنامه نویس های مدرن آنقدر صبور نیستند که برای یک فیچر، تا 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. گفته شد:
منبع:
.Net Core in Action | Dustin Metzgar