معرفی ASP.NET 5
سه شنبه 23 اردیبهشت 1399اولین نسخه پیشنمایش ASP.NET 1.0 سالها پیش منتشر شد. از آن زمان تا کنون، میلیونها توسعهدهنده از آن برای ساخت و اجرای برنامههای بزرگ وب استفاده کردهاند، و با گذشت سالها، قابلیتهای زیادی به آن اضافه شده و توسعه یافته است.
امروز میخواهم در مورد انتشار جدید ASP.NET بنویسم که ASP.NET 5 نامیده میشود. این نسخه جدید یکی از قابل توجهترین بهروزرسانیهای معماری است که برای ASP.NET انجام شده است. مایکروسافت میخواهد ASP.NET را سبکتر، ماژولارتر، cross-platform و به صورت cloud بهینهشده بسازد.
ASP.NET 5 یک فریمورک open source برای ساخت برنامههای مدرن وب است که میتواند در ویندوز، لینوکس و Mac توسعه یافته و اجرا شود. شامل فریمورک MVC 6 است که اکنون ویژگیهای MVC و Web API را درون یک فریمورک برنامهنویسی وب واحد ترکیب میکند. ASP.NET 5 همچنین پایهای برای SignalR 3 است. این امکان را به شما میدهد تا قابلیتهای زمان واقعی را به برنامههای متصل به cloud اضافه کنید. ASP.NET 5 بر روی NET Core runtime. ساخته شده است، اما میتوان آن را با .NET Frameworkکامل اجرا کرد تا حداکثر سازگاری را داشته باشد.
با ASP.NET 5 چندین تغییر معماری انجام شده است که هسته فریمورک وب بسیار سبکتر (دیگر نیازی به System.Web.dll نیست) و ماژولارتر (تقریبا همه ویژگیها اکنون به عنوان ماژولهای NuGet اجرا میشوند؛ به شما اجازه میدهد تا برنامه خود را بهنیهسازی کنید تا آنچه را که نیاز دارید داشته باشید) شده است. با ASP.NET 5 شما پیشرفتهای اساسی زیر را به دست میآورید:
ساخت و اجرای برنامههای cross-platform ASP.NET بر روی ویندوز، مک و لینوکس
ساخته شده بر روی NET Core. که از نسخههای برنامهها در کنار یکدیگر پشتیبانی میکند
ابزار جدیدی که توسعه وب مدرن را ساده میکند
پیکربندی مبتنی بر محیط آماده برای Cloud
پشتیبانی یکپارچه برای ایجاد و استفاده از پکیجهای NuGet
پشتیبانی داخلی از تزریق وابستگی (dependency injection)
امکان هاستینگ بر روی IIS یا self-host (خود میزبانی) در فرآیند شما
نتیجه نهایی ASP.NETای است که با آن بسیار آشنا خواهید بود و همچنین برای توسعه وب مدرن تنظیم شده است.
زمان اجرای Cross-Platform، انعطافپذیر
ASP.NET 5 با دو محیط زمان اجرا (runtime) کار میکند تا هنگام هاستینگ برنامه، انعطافپذیری بیشتری به شما بدهد. دو انتخاب runtime عبارتند از:
NET Core.: یک runtime جدید، ماژولار، cross-platform. وقتی شما NET Core. را هدف قرار میدهید، میتوانید از مزایای جدید مهیج بهره ببرید:
1. میتوانید NET Core runtime. را با برنامه خود deploy کنید که این یعنی برنامه شما با این نسخه deploy شده از runtime به جای نسخه runtimeای که بر روی سیستم عامل میزبان نصب میشود، اجرا خواهد شد. نسخه runtime شما با نسخههای سایر برنامهها در کنار هم اجرا میشوند. شما میتوانید در صورت لزوم، بدون تأثیرگذاری بر برنامههای دیگر، آن runtime را آپدیت کنید، یا میتوانید حتی با وجود به روز رسانی سایر برنامههای موجود بر روی سیستم، به اجرا بر روی همان نسخه ادامه دهید. این استقرار برنامه (deploy) و به روزرسانی فریمورک را برای سایر برنامههای در حال اجرا بر روی سیستم بسیار آسانتر و تأثیرگذارتر میسازد.
2. برنامه شما به ویژگیهایی که واقعا مورد نیاز است وابسته است. بنابراین هرگز شما را مجبور نمیکند که runtime را برای ویژگیهایی که به برنامه شما ربطی ندارند به روز رسانی کنید. شما زمان کمتری را صرف تست و بهروزرسانی میکنید که شاید ارتباطی با عملکرد برنامه شما نداشته باشد.
3. اکنون برنامه شما میتواند به صورت cross-platform اجرا شود. یک نسخه cross-platformای از NET Core. برای سیستمهای ویندوز، لینوکس و Mac OS X ارائه شده است. صرف نظر از اینکه از کدام سیستم عامل برای توسعه استفاده میکنید یا از کدام سیستم عامل برای deploy کردن استفاده میکنید، میتوانید از NET. استفاده کنید.
NET Framework.: API برای NET Core. در حال حاضر محدودتر از NET Framework. است، بنابراین ممکن است نیاز باشد برنامههای موجود خود را برای هدف قرار دادن NET Core. تغییر دهید. اگر نمیخواهید که مجبور باشید برنامههای خود را به روز کنید، در عوض میتوانید برنامههای ASP.NET 5 را بر روی NET Framework. کامل (version 4.5.2 و بالاتر) اجرا کنید. هنگام انجام این کار به مجموعه کاملی از NET Framework APIs. دسترسی دارید. کتابخانهها و برنامههای موجود شما بدون تغییر بر روی این runtime اجرا خواهند شد.
MVC 6؛ مدل برنامهنویسی یکپارچه
MVC، Web API و Web Pages عملکردهای مکمل را ارائه میدهند و معمولا هنگام توسعه یک سولوشن با یکدیگر استفاده میشوند. با این حال، در انتشارات قبلی ASP.NET، این فریمورکهای برنامهنویسی به طور جداگانه پیادهسازی میشدند و بنابراین شامل برخی بخشهای تکراری یا ناسازگار بودند. با MVC 6، این مدلها در یک مدل برنامهنویسی واحد ادغام شدهاند. اکنون شما میتوانید یک برنامه وب واحد ایجاد کنید که Web UI و سرویسهای داده را بدون نیاز به وفق دادن اختلافات در این فریمورکهای برنامهنویسی مدیریت میکند. همچنین میتوانید یک سایت ساده را که ابتدا با Web Pages توسعه یافته است را به یک برنامه MVC قویتر تبدیل کنید.
اکنون میتوانید Razor views و دادههای تبادل شده با محتوا را از همان کنترلر و با استفاده از همان pipeline فیلتر MVC باز گردانید.
علاوه بر یکپارچگی فریمورکهای موجود، همچنین ویژگیهای جدیدی برای آسانتر کردن توسعه وب در سمت سرور اضافه شدهاند، مثل ویژگی جدید tag helperها. Tag helperها به شما اجازه میدهند تا به سادگی با توسعه سمنتیک تگها در markup خود، از HTML helperها در viewهای خود استفاده کنید.
بنابراین به جای نوشتن این:
@Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" }) </div> </div>
میتوانید این را بنویسید:
<div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="UserName" class="col-md-2 control-label"></label> <div class="col-md-10"> <input asp-for="UserName" class="form-control" /> <span asp-validation-for="UserName" class="text-danger"></span> </div> </div>
Tag helperها ویوهای شما را تمیزتر و خواندنیتر میسازند. آنها همچنین سفارشیسازی خروجی HTML helperها را با markup دیگری ساده میکنند در حالی که به شما امکان میدهند از ویرایشگر HTML بهره کامل را ببرید.
توسعه وب مدرن
ASP.NET 5 همچنین تعدادی از ویژگیهای مهم دیگر توسعه را در اختیار شما قرار میدهد که میتوانید برنامههای وب بهتری را ایجاد کنید:
توسعه داینامیک
در ویژوال استودیو 2015 به بعد ما از کامپایل داینامیک برای ارائه تجربه توسعه ساده بهره میبریم. دیگر لازم نیست هر بار که میخواهید تغییرات را مشاهده کنید، برنامه خود را کامپایل کنید. در عوض، فقط 1) کد را ویرایش کنید، 2) تغییرات خود را ذخیره کنید، 3) مرورگر را رفرش کنید، 4) میبینید که تغییرات شما به صورت خودکار نمایان میشوند.
شما از تجربه توسعهای لذت میبرید که شبیه به کار کردن با یک زبان تفسیر شده است بدون اینکه فواید زبان کامپایلشده را قربانی کند.
همچنین میتوانید به صورت اختیاری از سایر ویرایشگرهای کد برای کار با پروژههای ASP.NET 5 استفاده کنید. هر عملکردی درون رابط کاربری ویژوال استودیو با عملیات خط فرمان (command-line) cross-platform مطابقت دارد.
ادغام با ابزارهای محبوب توسعه وب (Bower، Grunt و Gulp)
یکی دیگر از ویژگیهای جالب موجود در ویژوال استودیو 2015 به بالا پشتیبانی داخلی از Bower، Grunt، و Gulp است. ابزار محبوب open source که ما فکر میکنیم باید در هر ابزار توسعهدهنده وبی باشد.
Bower یک package manager برای کتابخانههای سمت کلاینت است، از جمله کتابخانههای JavaScript وCSS.
Grunt و Gulp اجراکنندههای وظایف (task runner) هستند که به شما کمک میکنند گردش کار توسعه وب خود را به صورت خودکار انجام دهید. میتوانید از Grunt یا Gulp برای وظایفی مانند کامپایل LESS، CoffeeScript یا فایلهای TypeScript، اجرای فایلهای JSLint یا کم حجم کردن JavaScript استفاده کنید.
Bower: برای افزودن کتابخانه جاوااسکریپت به پروژه ASP.NET آن را مستقیما در فایل کانفیگ bower.json قرار دهید:
توجه کنید که ویژوال استودیو IntelliSense را با لیستی از پکیجهای موجود به شما میدهد. دفعه بعد که سولوشن را باز میکنید، ویژوال استودیو به طور خودکار پکیجهای از دست رفته را بازیابی میکند، بنابراین نیازی نیست که پکیجها را در سورس کنترل چک کنید.
برای پکیجهای سمت سرور، شما همچنان از NuGet Package Manager استفاده خواهید کرد.
Grunt: در توسعه وب مدرن، شما میتوانید بسیاری از وظایف برای ساخت برنامه خود را مدیریت کنید: کامپایل LESS، TypeScript یا فایلهای CoffeeScript، کم حجم کردن جاوااسکریپت، اجرای JS unit tests، و بسیاری موارد دیگر. هر تیم بسته به ابزار خاصی که شما استفاده میکنید، مجموعهای از الزامات خاص خود را دارد. Task runnerها مدیریت و هماهنگی این وظایف را آسانتر میسازند. ویژوال استودیو 2015 دو task runner محبوب را پشتیبانی میکند، Grunt و Gulp.
مثلا بیایید بگوییم که شما میخواهید از Grunt برای کامپایل فایلهای LESS استفاده کنید. کافی است به package.json بروید و پکیج grunt-contrib-less، که یک پلاگین شخص ثالث Grunt است، را اضافه کنید.
از Task Runner Explorer جدید در ویژوال استودیو 2015 استفاده کنید تا کار را به مرحله build (pre-build، post-build، clean یا وقتی که سولوشن باز است) متصل کنید.
این کار خودکار کردن وظایف متداول در پروژه شما را بسیار آسان میسازد، و این مورد هم برای شما و هم در پروژه گسترده تیمی کار میکند.
مدیریت وابستگی ساده شده
در ASP.NET 5 با افزودن بستههای NuGet وابستگیها را مدیریت میکنید. میتوانید از NuGet Package Manager استفاده کنید یا فایل JSON (project.json) که لیست نسخهها و بستههای NuGet مورد استفاده در پروژهیتان است را به راحتی ویرایش کنید. کار با فایل project.json آسان است و میتوانید با هر ویرایشگر متنی آن را ویرایش کنید، که این امکان را به شما میدهد تا وابستگیها را حتی وقتی برنامه بر روی فضای ابری deploy شده است، بهروزرسانی کنید.
فایل project.json به این صورت است:
در ویژوال استودیو 2015، IntelliSense در پیدا کردن پکیجهای موجود NuGet که میتوانید به عنوان وابستگی اضافه کنید، کمک میکند.
و Intellisense حتی میتواند به شما در نسخههای موجود کمک کند:
پیکربندی فراهم شده برای Cloud
در ASP.NET 5، نیاز به استفاده از فایل Web.config برای مقادیر پیکربندی (configuration) حذف شده است. مایکروسافت میخواهد کار deploy کردن برنامه برای cloud را آسانتر سازد و برنامه مقادیر پیکربندی صحیح را به صورت خودکار برای این محیط بخواند. سیستم جدید شما را قادر میسازد مقادیر نامگذاری شده را از منابع متنوعی (مانند JSON، XML یا environment variableها) درخواست کنید.
در فایل Startup.cs، میتوانید منابع را برای مقادیر configuration اضافه یا حذف کنید.
قطعه کد بالا پروژهای را نشان میدهد که برای بازیابی مقادیر configuration از یک فایل JSON و متغیرهای محیطی (environmental variable) تنظیم شده است. در صورت نیاز به مشخص کردن منابع دیگر میتوانید این کد را تغییر دهید. در فایل config.json مشخصشده، میتوانید مقادیر را ارائه دهید.
در محیط هاست، مثل Azure، میتوانید environmental variableها را تنظیم کنید و بعد از deploy کردن برنامه این مقادیر به جای مقادیر پیکربندی محلی به طور خودکار استفاده میشوند. شما میتوانید برنامه خود را بدون نگرانی در مورد انتشار مقادیر تست deploy کنید.
تزریق وابستگی (Dependency injection)
DI در فریمورکهای ASP.NET، مانند MVC، Web API و SignalR پشتیبانی میشود، اما به روش پایدار و همه جانبهای نیست. ASP.NET 5 یک انتزاع DI داخلی ایجاد میکند که به روشی پایدار در کل web stack موجود است. شما در هنگام راهاندازی، در middleware، در فیلترها، در کنترلرها، در model binding و به صورت مجازی هر بخشی از pipeline که میخواهید برای سرویسهای خود استفاده کنید، میتوانید به سرویسها دسترسی پیدا کنید. ASP.NET 5 شامل یک کانتینر DI برای خود راهاندازی سیستم میباشد، اما شما میتوانید به راحتی کانتینر پیشفرض را با کانتینر انتخابی خود (Autofac، Ninject و غیره) جایگزین کنید.
مثلا برای دیدن نحوه استفاده از constructor injection با ASP.NET MVC 6، یک پروژه ASP.NET 5 Starter Web جدید ایجاد کرده و یک time service ساده اضافه کنید:
using System; namespace WebApplication1 { public class TimeService { public TimeService() { Ticks = DateTime.Now.Ticks.ToString(); } public String Ticks { get; set; } } }
کلاس ساده سرویس Ticks فعلی را هنگام فراخوانی کانستراکتور تنظیم میکند.
در مرحله بعد، time service را به عنوان transient service در متد ConfigureServices ی کلاس Startup ثبت کنید:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddTransient<TimeService>(); }
سپس، HomeController را به روز کنید تا از constructor injection استفاده کند و Ticks را هنگام ایجاد TimeService object بنویسید.
public class HomeController : Controller { public TimeService TimeService { get; set; } public HomeController(TimeService timeService) { TimeService = timeService; } public IActionResult About() { ViewBag.Message = TimeService.Ticks + " From Controller"; System.Threading.Thread.Sleep(1); return View(); } // Code removed for brevity }
توجه کنید که کنترلر TimeService را ایجاد نمیکند. این وقتی که کنترلر نمونهسازی میشود تزریق میشود.
در MVC 6 شما میتوانید از اتربیوت [Activate] برای تزریق سرویسها از طریق پراپرتیها استفاده کنید. شما میتوانید از [Activate] نه تنها در کنترلرها بلکه در فیلترها، و view componentها نیز استفاده کنید. این یعنی شما میتوانید کد کنترلر خود را مانند این ساده کنید:
public class HomeController : Controller { [Activate] public TimeService TimeService { get; set; } // Code removed for brevity }
MVC 6 همچنین از طریق کلمه کلیدی inject@ از DI در Razor views پشتیبانی میکند. در کد زیر، من time service را در about view به طور مستقیم تزریق کردهام و یک پراپرتی TimeSvc را تعریف کردهام که میتوان به آن دسترسی داشت:
@using WebApplication23 @inject TimeService TimeSvc <h3>@ViewBag.Message</h3> <h3> @TimeSvc.Ticks From Razor </h3>
وقتی برنامه را اجرا کنید، میتوانید مقادیر ticks مختلف را از controller و view ببینید.
عملکرد سریع HTTP
ASP.NET 5 یک HTTP request pipeline جدید معرفی میکند که ماژولار است، بنابراین میتوانید فقط اجزای مورد نیاز خود را اضافه کنید. همچنین pipeline دیگر وابسته به System.Web نیست. با کاهش سربار در pipeline، برنامه شما میتواند توان عملیاتی بهتر و HTTP stack تنظیمشدهتری را تجربه کند. Pipeline جدید مبتنی بر بسیاری از یادگیریهای پروژه Katana است و همچنین از OWIN پشتیبانی میکند.
برای سفارشیسازی اجزای مورد استفاده در pipeline، از متد Configure در کلاس Startup استفاده کنید. متد Configure برای مشخص کردن اینکه شما میخواهید از کدام middleware در request pipeline استفاده کنید مورد استفاده قرار میگیرد. ASP.NET 5 شامل نسخههای منتقل شده از بسیاری از middlewareها از پروژه Katana، مانند middleware برای فایلهای استاتیک و authentication است. تصویر زیر برخی از ویژگیهایی را که میتوانید به pipeline پروژه خود اضافه و حذف کنید، نشان میدهد.
public void Configure(IApplicationBuilder app) { // Add static files to the request pipeline. app.UseStaticFiles(); // Add cookie-based authentication to the request pipeline. app.UseIdentity(); // Add MVC and routing to the request pipeline. app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); });
شما همچنین میتوانید کامپوننتهای middleware خودتان را بنویسید و آنها را به pipeline اضافه کنید.
Open source
ما ASP.NET 5 را به عنوان یک منبع open source در GitHub توسعه دادهایم. میتوانید کد را مشاهده کنید، تغییرات ایجاد شده را ببینید، کد را دانلود کنید، و تغییرات را ارسال کنید. ساخت ASP.NET 5 منبع باز باعث درک آسانتر کد، درک مسیر تعیین شده و مشارکت در پروژه میشود.
- ASP.net
- 3k بازدید
- 3 تشکر