سارا رضائی
سارا رضائی
خواندن ۸ دقیقه·۴ سال پیش

در باب NET Core. - قسمت اول

از ماه نوامبر سال 2020، مایکروسافت پسوند Core را حذف کرد و NET 5. را عرضه کرد. در این مقاله، برای تاکید روی تفاوت NET Framework. و NET. (نسخه ی آخر NET Core. سابق)، از عبارت NET Core. استفاده خواهد شد.

یاد گرفتن یک framework جدید برای توسعه ی نرم افزار، هزینه های زیادی دارد. باید یاد بگیریم که چطور بنویسیم، build کنیم، تست کنیم، پابلیش بدهیم و نگهداری کنیم.

بنابراین تصمیم گیری در زمینه ی مهاجرت به یک platform جدید، نیازمند بررسی مزایای آن است. در این نوشته از دو جهت این مساله بررسی خواهد شد:

1. اگر تا الان با NET Framework. کار می کردید:

قطعا به نفع شماست که به NET Core. مهاجرت کنید. البته احتمالا بعضی از قسمت های کد که وابسته به component های ویندوز هستند، به درستی کار نمی کنند و باید بازنویسی شوند.

اما موارد زیر باعث می شود مهاجرت به صرفه باشد:

  • نرم افزار، قابلیت cross-platform شدن خواهد داشت. یعنی روی سیستم عامل های مختلف امکان اجرا دارد.
  • امکان استفاده از ASP.NET Core وجود دارد، که از نظر پرفورمنس بسیار بهتر از ASP.NET Framework عمل می کند.
  • احتمالا تمام نوآوری های مایکروسافت، از این به بعد، روی NET Core. خواهد بود. از آنجا که مایکروسافت به ازای هر تغییری که روی NET Framework. می دهد باید نیم نگاهی به نسخه های قبلی داشته باشد، پس هر تغییر و بهبود روی NET Framework. هزینه دارد. بنابراین تغییر روی آن کمتر خواهد بود و بیشتر به سمت BugFix خواهد رفت. پس ویژگی های جدید، اکثرا روی NET Core. پیاده سازی خواهد شد.
  • فاصله ی بین release ها کوتاه تر خواهد بود. قبلا، اگر خطایی روی NET Framework. پیدا می شد، برنامه نویس ها باید حداقل یک سال برای fix شدن bug صبر می کردند. ولی روی NET Core. به خاطر open source بودن و حذف وابستگی ها (تمام library هایی که روی framework بود جدا شده و برای دسترسی به آن ها باید از NuGet استفاده کرد) عملیات release، ساده تر هست.

2. اگر هیچ وقت با NET. کار نکرده اید:

باز هم به نفع شماست که NET Core. را انتخاب کنید. با این که که NET.، بعد از cross-platform شدن، با رقبای زیادی دست و پنجه نرم می کند، ولی هنوز هم برگ های برنده ای دارد:

  • زبان برنامه نویسی C# قابلیت های بسیاری دارد.
  • تمام تجربیات مایکروسافت در مورد NET Framework. ، روی طراحی و توسعه ی NET Core. تاثیر گذاشته، پس این فقط یک framework جدید و خام نیست. بلکه یک نسخه ی بهبود یافته از یک framework است که سال ها کار کرده و امتحان خود را پس داده است.
  • پرفورمنس NET Core. در مقایسه با NET Framework. بسیار بهتر است. تیم CLR مایکروسافت، چندین سال روی GC و JIT کار کرده، و NET Core. هم روی همین بستر بنا شده است. همچنین طبق برنامه های اعلام شده، این تیم روی پرفورمنس NET Core. باز هم کار خواهد کرد و باید منتظر بهبود بیشتری در این زمینه باشیم.

تعریف NET Core. :

بهتر است ابتدا با 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 معرفی شدند.

هر سه 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، در نتیجه برنامه نویس ها محدود به ابزار خاصی نشده و می توانند از ابزار مورد علاقه ی خود برای توسعه ی نرم افزار، استفاده کنند.


منبع:

.Net Core in Action | Dustin Metzgar




dotnet coredotnet frameworksoftware developmentdotnetتوسعه نرم افزار
linkedin.com/in/sara-rez
شاید از این پست‌ها خوشتان بیاید