مقایسهی NET Core. و NET Framework.
طی بررسیهایی که برروی NET Core. انجام شدهاست، به نظر میرسد که هدف بزرگی را در پیش گرفته باشد. درواقع به نظر میرسد در سال 2018 تقاضا برای متخصصین این تکنولوژی خیلی بالا برود. ولی تفاوت آن با NET Framework. در چیست و چه مواقعی باید از آن استفاده کنیم؟ در این مقاله به بررسی تفاوتهای اصلی این دو و بهترین زمان استفاده از هرکدام از آنها خواهیم پرداخت.
در گذشته، NET Framework. تنها برروی دستگاههای ویندوزی قابل استفاده بود. «زامارین» (Xamarin) و «مونو» (Mono) سعی کردند که NET. را به تلفنهای همراه، «Mac» و لینوکس هم بیاورند. NET Core. یک کتابخانهی استاندارد ارائه میدهد که میتواند در ویندوز، لینوکس، Mac و به لطف زامارین، در تلفنهای همراه نیز مورد استفاده قرار گیرد.
چهار اجزای اصلی از ساختار NET. موارد زیر هستند:
- «Common language specification» یا «CLS» که مشخص میکند هر شی چگونه قرار بگیرد تا در هر جایی که NET. کار میکند، کار کند. درواقع «CLS» یک زیر مجموعه از «Common Type System» یا «CTS» است که یک روش عمومی برای تعریف انواع دادهها است.
- «Framework class library» یا «FCL» که یک کتابخانهی استاندارد است که کلاسها، اینترفیسها و انواع دادهای مورد استفاده را شامل میشود.
- «Common language runtime» یا «CLR» که یک ماشین مجازی است که فریمورک را در خود اجرا کرده و نرمافزارهای نوشته شده در NET. را مدیریت میکند.
- ابزارهایی نظیر Visual Studio که برای ساخت نرمافزارهای اجرایی، وبسایتهای تعاملی، وب اپلیکیشن و وب سرویسها استفاده میشود.
مقایسهی NET Core. و NET Framework.
طراحی و مدیریت هردوی این runtimeها بر عهده مایکروسافت است، و در نتیجه تعداد زیادی از APIهای مشترک را شامل میشوند. به این APIهای مشترک، NET Standard. گفته میشود.
توسعهدهندگان از NET Framework. برای ساخت اپلیکیشنهای ویندوز و سرور استفاده میکنند که شامل اپلیکیشنهای ASP.NET هم میشود. NET Core. برای ساخت اپلیکیشنهای سروری (Server Applications) مورد استفاده قرار میگیرد که امکان اجرا برروی ویندوز، لینوکس و مک را دارند. در حال حاضر NET Core. از ساخت اپلیکیشنهای دسکتاپی که دارای رابط کاربری هستند پشتیبانی نمیکند. توسعهدهندگان میتوانند نرمافزارها و کتابخانههای خود را برای هرکدام از این runtimeها در #C یا VB.NET یا #F بنویسند.
- #C یک زبان برنامهنویسی شیءگرا است که به سایر زبانهای C شباهت دارد. یادگیری کلیت این زبان برای کسانی که با سایر زبانهای C و مشابه کار کرده باشند دشوار نیست.
- #F یک زبان برنامهنویسی کراس-پلتفرم است که از برنامهنویسی شیءگرا پشتیبانی میکند.
- ویژوال بیسیک نیز در NET Framework. موجود است و پشتیبانی محدودی نیز از NET Core 2.0. دارد.
چه موقع از NET Core. استفاده کنیم؟
NET Core. یک فریمورک کراس-پلتفرم و متنباز (Open-source) است که میتواند برای ساخت اپلیکیشن برای هر پلتفرمی مورد استفاده قرار گیرد. اغلب برای ساخت نرمافزارهای ابری (Cloud Applications) یا تبدیل اپلیکیشنهای تجاری بزرگ به مایکروسرویسها (Microservices) از این فریمورک استفاده میکنند.
1. در مواقعی که نیاز به برنامهنویسی کراس-پلتفرم دارید
از NET Core. در مواقعی استفاده کنید که میخواهید نرمافزارتان را در پلتفرمهای مختلف، از جمله ویندوز، لینوکس و Mac اجرا کنید. این سیستمعاملها در NET Core. پشتیبانی میشوند و لیست سیستمعاملهای پشتیبانی شده به طور مداوم در حال گسترش است.
ویژوال استودیو را میتوانید علاوه بر ویندوز، به طور محدود در Mac نیز اجرا کنید. «ویژوال استودیو کد» (Visual Studio Code) را میتوانید در ویندوز، لینوکس و Mac اجرا کنید. امکان استفاده از «Command line» در تمامی پلتفرمهای پشتیبانی شده موجود است.
2. در مواقعی که از مایکروسرویسها استفاده میکنید
مایکروسرویسها که یک نوع ساختار برپایهی سرویس را ارائه میدهند، نرمافزارهایی هستند که از سرویسهای کوچک و ماژولار تشکیل شدهاند. هر سرویس میتواند پروسهی مختص به خودش را اجرا کند و در نرمافزارهای مختلف به صورت مستقل اعمال شود. NET Core. اجازهی مخلوط کردن چند تکنولوژی را میدهد، سبک است و میتواند برای هر مایکروسرویس حجم سبکتری داشته باشد. با اضافه شدن مایکروسرویسهای جدید، سایز آن قابل تغییر است.
3. هنگامی که در نرمافزار خود از مخزنهای داکر (Docker Containers) استفاده میکنید
مخزنهای داکر و مایکروسرویسها اغلب در کنار هم استفاده میشوند. به دلیل سبکی و ماژولار بودن این مخزنها، NET Core. به خوبی با آنها سازگار است. نرمافزارهای تحت سرور میتوانند به کمک مخزنهای داکر به صورت کراس-پلتفرم عرضه شوند. البته NET Framework. هم میتواند همراه داکر استفاده شود، ولی حجم نهایی بیشتر خواهد بود.
4. در مواقعی که نیاز به پردازش قوی و سیستمهای انعطافپذیر دارید
براساس پیشنهاد مایکروسافت، بهتر است که NET Core. را به همراه ASP.NET Core استفاده کنید تا بهترین عملکرد و اندازه را بگیرید. این امر در مواقعی مهم میشود که از صدها مایکروسرویس استفاده کنید. با اینکار، تعداد سرور و ماشین مجازی مورد نیاز کاهش مییابد. این کارایی و انعطافپذیری میتواند تجربهی کاربری بهتری را ارائه دهد و در کنار آن، در هزینهها صرفهجویی کند.
5. در مواقعی که از چندین نسخهی .NET همزمان استفاده میکنید
برای نصب نرمافزارهایی که به نسخههای مختلفی از NET Framework. نیاز دارند، توسعهدهندگان باید از NET Core. استفاده کنند. با اینکار میتوان چندین سرویس را که به NET Framework. های متفاوت نیاز دارند، برروی یک سرور اجرا کرد.
6. در مواقعی که میخواهید از رابط «Command line» استفاده کنید
برخی از توسعهدهندگان ترجیح میدهند در ویراستارهای سبکتر و برپایهی متن کار کنند. NET Core. یک «CLI» برای همهی پلتفرمهایی که پشتیبانی میکند، ارائه دادهاست. نصب آن بسیار ساده و سبک است، و همیشه هم فرصت جابهجایی به محیطهای توسعه نظیر ویژوال استودیو را دارید.
چه موقع از NET Core. استفاده نکنیم؟
یکی از مشکلات NET Core. این است که تمام امکانات NET. را ندارد و از تمام کتابخانهها و افزونهها پشتیبانی نمیکند. در برخی از مواقع بهتر است که از NET Core. استفاده نکنیم، البته با گذر زمان و توسعهی بیشتر، احتمالا در آینده برای تمام موارد استفاده مناسب خواهد شد. ولی فعلا بهتر است در موارد زیر از آن استفاده نکنیم:
1. در مواقع توسعهی نرمافزار بر پایهی«Windows Forms» و «WPF»
این دو هنوز پشتیبانی نمیشوند. هنوز هم برای ساخت یک اپلیکیشن NET. برای Mac باید از مونو استفاده کنید.
2. در مواقع استفاده از ASP.NET Webforms
مایکروسافت برنامهای برای منتقل کردن آن به ASP.NET Core ندارد.
3. در مواقعی که نیاز به ساخت یک «WCF Service» دارید
NET Core. در حال حاضر از WCF پشتیبانی نمیکند. به جای آن باید یک «REST API» به کمک «ASP.NET Core MVC» بسازید.
4. در مواقعی که امکاناتی میخواهید که مختص NET Framework. است
برخی از امکانات NET Framework. هنوز در NET Core. وجود ندارد. برای مثال، «Entity Framework Core» با «Entity Framework v6» متفاوت است.
5. در مواقعی که نیاز به استفاده از APIهای مختص ویندوز دارید
اگر نرمافزار شما نیاز دارد تا با رجیستری ویندوز، WMI یا سایر APIهای مخصوص ویندوز کار کند، امکان نوشتن آن با NET Core. را ندارید. NET Core. به گونهای طراحی شده است که محیط بستهتر و دور از سیستمعامل داشته باشد.
چه موقع از NET Framework. استفاده کنیم؟
NET Framework. همراه با ویندوز عرضه شدهاست. معمولا برای ساخت نرمافزارهای ویندوز و نرمافزارهای تجاری به همراه NET workflow. استفاده میشود. از امکانات آن میتوان موارد زیر را نام برد:
- مدیریت حافظه
- محافظت از دادهها و حافظه
- امنیت
- شبکه
- عرضهی نرمافزار
- ساختمان دادهها
- APIهای مختلف
علاوه بر این موارد، میتوان آن را همراه داکر و «Windows container» استفاده کرد. بهترین مواقع استفاده از NET Framework. عبارتند از:
1. در مواقعی که از قبل تحت استفاده بودهاست
به جای مهاجرت کردن به NET Core.، نرمافزار خودتان را گسترش بدید. برای مثال، توسعه دهندگان میتوانند یک وب سرویس جدید را در ASP.NET Core بنویسند.
2. در مواقعی که از کتابخانههای جانبی استفاده میکنید
هنوز تمامی امکانات NET Framework. در NET Core. پشتیبانی نمیشود. برخی از امکانات پشتیبانی نشده عبارتند از:
- ASP.NET Web Forms applications
- ASP.NET Web Pages applications
- ASP.NET SignalR server/client implementation
- WCF services implementation
- سرویسهای مربوط به «Workflow»
- «Windows Presentation Foundation» یا «WPF» و «Windows Forms»
- «Visual Basic» و «#F»
3. در مواقعی که پلتفرم مقصد از NET Core. پشتیبانی نمیکند
هنوز تمامی پلتفرمهای مایکروسافت و جانبی از NET Core. پشتیبانی نمیکنند، نظیر سرویس آزور (Azure). البته خیلیها برنامه دارند تا در آینده پشتیبانی از آن را اضافه کنند. ممکن است در برخی از سرویسهای پشتیبانی شده هم دچار مشکل شوید. با رشد NET Core. پیدا کردن راه حل برای مشکلاتی که ممکن است سر راه شما باشد، راحتتر میشود.
چه موقع از NET Framework. استفاده نکنیم؟
برخی شرایط نیز وجود دارند که در آنها نباید از NET Framework. استفاده کنید، برای مثال:
- در مواقعی که چند سیستمعامل را هدف گرفتهاید.
- در مواقعی که پردازش و انعطافپذیری بالا نیاز دارید.
- در مواقعی که NET Core. کار میکند.
- در مواقعی که یک فریمورک متنباز نیاز دارید.
چگونه پروژهای را از NET Framework. به NET Core. منتقل کنیم؟
برای اینکار، بر اساس مراحل زیر عمل کنید:
1. کتابخانههای جانبی خود را بررسی کنید.
البته این بدان معنی نیست که فقط بدانید کتابخانههای جانبی شما چی هستند. باید بدانید که نرمافزار شما چگونه و در چه جاهایی به آن کتابخانه وابسته است و اینکه آیا آن کتابخانه در NET Core. کار میکند و اگر خیر پس باید چه کار کرد.
پکیجهایی که از «NuGet» دریافت شدهاند را راحت میشود بررسی کرد، چراکه در وبسایت «NuGet» معمولا این نکات اعلام شدهاند، و علاوه بر آن بر اساس پوشهبندیهای آن پکیج نیز میتوان متوجه عملکرد آن شد. همچنین میتوانید به صفحهی پکیج بروید و به دنبال پوشه یا ورودی با یکی از اسامی زیر بگردید:
اگر کتابخانه را از «NuGet» دریافت نکردهاید، میتوانید از ابزار «ApiPort» برای بررسی وضعیت سازگاری آن استفاده کنید.
در NET Core 2.0. یک ابزار به نام «shim» میتواند امکان استفاده از پکیجهای NET Framework. که برای استفاده در NET Standard. تبدیل نشدهاند را فراهم کند. حتما این پکیجها را کامل بررسی کنید، چون امکان دارد در آنها APIهایی وجود داشته باشند که پشتیبانی نمیشوند.
2. هدف خود را کتابخانهی NET Standard. قرار دهید
کتابخانهی NET Standard. به گونهای طراحی شدهاست که در تمامی NET Runtime.ها قابل استفاده باشد، در نتیجه قرار دادن هدف برروی کتابخانهی NET Standard. بهترین راه برای ساخت یک نرمافزار کراس-پلتفرم است.
نسخههای مختلفی وجود دارد که باید برای اجرای نرمافزار روی هر پلتفرم در نظر بگیرید. اگر یک پروژه برای نسخهی پایینتری طراحی شده باشد، نمیتواند از یک پروژه که برای نسخهی بالاتری طراحی شدهاست، استفاده شود. اگر میخواهید از NET Standard. برروی تمامی پروژهها استفاده کنید، پایینترین نسخه را استفاده کنید. در زیر جدولی از نسخههای مختلف میبینید که نشان میدهد هر نسخه در کدام بخشها امکان اجرا دارد:
3. نسخهی فریمورک مورد استفادهی خود را تغییر دهید
تمامی پروژههایی که قصد تبدیل آن به NET Core. را دارید، باید برای NET Framework 4.6.2. ساخته شدهباشند. این امر باعث میشود که APIهای جانبی که برای سیستمهای خاصی از NET Framework. استفاده شدهاند، امکان استفاده در جاهایی که آن APIها پشتیبانی نمیشوند را داشته باشند. این کار به سادگی در ویژوال استودیو قابل انجام است. تنها کافیست با یک دستور «Target Framework» آن را تغییر دهید و پروژه را مجددا کامپایل کنید.
4. از فریمورکهای تست کد استفاده کنید
تبدیل کد به NET Core. یک تغییر خیلی بزرگ است و تست کردن آن کد به شدت توصیه میشود. از یک فریمورک مناسب برای تست استفاده کنید. از جمله این فریمورکها میتوان از «xUnit»، «NUnit» و «MSTest» نام برد. با ابزارهایی مانند «xUnit» میتوان از قالبهای مختلف استفاده کرد و آنها را به گونهای تغییر داد که برای تست NET Core. مناسب باشند. در زیر یک مثال از یک فایل ویرایش شدهی csproj را میبینید:
5. کد خود را با برنامه تبدیل کنید
بهترین راه برای تبدیل کد بستگی به ساختار فریمورک دارد. ولی بخشبندی کردن کد و لایهبندی آن معمولا کار را سادهتر میکند.
- کدهای پایهی خود را شناسایی کنید. کدهای پایه میتوانند مدلهای دادهای، کلاسها یا متدهایی باشند که سایر بخشهای نرمافزار به استفاده از آن نیاز دارند.
- کدهای پایه را به یک پروژهی جدید برپایهی NET Core. منتقل کنید.
- هر تغییری که لازم است، اعمال کنید تا بتوانید کد را کامپایل کنید.
- سایر لایههای کد را بر اساس همین مراحل منتقل کنید.
زامارین چیست؟
در ابتدا ممکن است این نام، نام یک دارو به نظر برسد، ولی زامارین یک پلتفرم برنامهنویسی است که برروی آی او اس، اندروید و ویندوزفون اجرا میشود. زامارین به زبان #C نوشته شده و در تمامی نسخههای ویژوال استودیو قابل استفاده است.
به گفتهی مایکروسافت، زامارین بهترین راه برای ساخت رابط کاربری و بهینهسازی عملکرد یک نرمافزار در چندین پلتفرم است. زامارین این امکان را میدهد که یک کد را برروی چندین پلتفرم اجرا کنید، و چون تنها از یک تکنولوژی استفاده میکنید، در زمان و هزینههای شما صرفهجویی میشود. البته برای نرمافزارهایی که رابط کاربری حساسی دارند ممکن است نیاز به کد زدن بیشتری برای هر پلتفرم داشته باشید که در نتیجه مقدار اشتراک کدها در پلتفرمها کاهش مییابد.
اطلاعات بیشتری در مورد NET Standards.
در کنار NET Framework. و NET Core. و زامارین، NET Standards. نیز از پلتفرمهای زیر پشتیبانی میکند:
1. مونو (Mono): یک پلتفرم متنباز برپایهی NET. است که قبل از شروع همکاری زامارین و مایکروسافت استفاده از آن استفاده میکردند. این پلتفرم برپایهی «استانداردهای ECMA برای #C و سایر زبانها با ساختار یکسان» ساخته شده است. علاوه بر #C، توسعهدهندگان میتوانند از VB 8، جاوا، پایتون (Python)، «روبی» (Ruby)، «ایفل» (Eiffel) و اکسیژن (Oxygene) برای توسعهی نرمافزارهای خود در این پلتفرم استفاده کنند.
2. پلتفرم عمومی ویندوز (Universal Windows Platform): یک پلتفرم ساخته شده توسط مایکروسافت است. این پلتفرم با هدف کمک به توسعهی نرمافزارهایی که در ویندوز 10، ویندوز 10 موبایل، اکسباکس وان، اینترنت اشیا و هولولنز اجرا میشوند، ساخته شده است. توسعهدهندگان میتوانند از زبان #C ، زبان ++C ، زبان VB.NET و زبان XAML برای کدنویسی در آن استفاده کنند.
3. ویندوز: نسخههای 8 و 8.1 پشتیبانی میشوند.
4. ویندوز فون: ابتدا ویندوزفون برای مصرفکنندگان ساخته شده بود که بعدا در سال 2015 با ویندوز 10 موبایل جایگزین شد.
5. Windows Phone Silverlight: یک فریمورک منسوخ شده است که برای اجرای نرمافزارهای اینترنتی و رقابت با «Adobe Flash» طراحی شده بود.
در تمامی این پلتفرمها از NET Standards. استفاده شده است که مجموعهای از APIهای مشترک است که جایگزین کتابخانههای قابل حمل (Portable Class Libraries یا PCL) شده است. NET Standards. باعث میشود که از امکان اشتراک گذاری کدها بین نرمافزارهای دسکتاپ، موبایل، بازی ها و سرویسهای ابری مطمئن شویم.
امیدواریم که از مطالعهی این مقاله لذت برده باشید. اگر به دنبال راهحل برای سایر ضعفهای ویندوز میگردید، شاید مطالب زیر برایتان مفید باشند:
- فریمورک داتنت چیست و چرا به آن احتیاج داریم؟
- بررسی نسخههای متفاوت NET Framework.
- آموزش چارچوب توسعه تحت وب ASP.NET MVC
- گنجینه آموزش های ASP.NET
#
سلام و وقت بخیر
مثل همیشه مطالب مفید و کاربردی هستند.
تنها در خواستی که دارم تاریخ درج مطالب رو هم بی زحمت برای هر پست که منتشر میکنید،بگذارید تا بدونیم که بروز است یا خیر
خیلی ممنون
سلام، وقت شما بخیر؛
در زیر عنوان هر یک از مطالب مجله فرادرس آخرین تاریخی که مطلب بازبینی و به روز رسانی شده، ذکر شده است.
از اینکه با مجله فرادرس همراه هستید از شما بسیار سپاسگزاریم.