معرفی ASP.net 5

ASP.net 5 یک چارچوب وب متن باز برای ساختن برنامه های وب مدرن است که می تواند بر روی Windows ، Mac و Linux اجرا شود. شامل MVC 6 framework نیز می شود که امکانات MVC و Web API را در یک چهارچوب برنامه نویسی وب ترکیب کرده است

معرفی ASP.net 5

ASP.net 5 یک چارچوب وب متن باز  برای ساختن برنامه های وب مدرن است که می تواند بر روی Windows ، Mac  و Linux اجرا شود. شامل MVC 6 framework نیز می شود که امکانات MVC و Web API را در یک چهارچوب برنامه نویسی وب  ترکیب کرده است . همچنین ASP.Net 5  پایه و اساس SignalR 3  خواهد بود و به  شما امکان اضافه کردن قابلیت زمان واقعی به برنامه ها ی متصل شده Cloud را می دهد . ASP.net 5  بر روی .net core runtime ساخته شد اما می تواند بر روی full .net framework نیز برای سازگاری بیشتر اجرا شود.

با  ASP.net 5 می توانیم تغییرات معماری زیادی ایجاد کنیم که هسته چهارچوب وب را کوچکتر(دیگر نیاز به system.web.dll نباشد )  و بیشتر ماژولار کند. البته همه امکانات به صورت Nuget modules پیاده سازی شده اند که بتوانیم برنامه خود را بهینه سازی کنیم . با استفاده از ASP.net 5 بهبودهای بنیادی زیر را به دست می آورید.

     . ساخت و اجرای برنامه های cross-platform بر روی Windows ،  Mac و  Linux

     . ساخت بر روی هسته  .net که تمام جنبه های نسخه های برنامه را پشتیبانی میکند.

     . ابزارهای جدید که توسعه وب سایت های مدرن را آسان کرده اند.

     . پشته وب هم راستا برای web UI  و Web API  

     . پیکربندی Cloud آماده مبتنی بر اساس محیط

     . پشتیبانی یکپارچه برای ایجاد و استفاده از NuGet Pakage

     . ساخته شده در پشتیبانی برای تزریق  وابستگی

     . قابلیت میزبانی بر روی IIS و یا خود میزبانی در روند خودتان

نتیجه نهایی یک ASP.net  است که با آن آشنایی دارید  و در حال حاضر بیشتر برای طراحی وب مدرن تنظیم شده است.

Cross-Platform Runtime  قابل انعطاف

ASP.net 5   با دو محیط زمان اجرا کار میکند که انعطاف پذیری بیشتری هنگام میزبانی برنامه به شما می دهد. این دو انتخاب به شرح زیر می باشند :

.NET Core  : یک Cross-platform  زمان اجرا  است. هنگام استفاده از آن قادر خواهید بود از برخی مزایای جدید استفاده کنید:

   1. شما می توانید زمان اجرای .net core   را با برنامه خود افزایش دهید. به این معنی که برنامه شما با این نسخه گسترش داده شده از زمان اجرا ، بجای نسخه ای که در سیستم عامل میزبان نصب شده است اجرا خواهد شد. نسخه زمان اجرای شما در کنار نسخه های برنامه های دیگر اجرا خواهد شد.  می توانید آن را هر زمان که نیاز بود به روز رسانی کنید بدون آنکه بر دیگر برنامه ها تاثیر بگذارد. همچنین می توانید همان نسخه را ، حتی اگر برنامه های دیگر به روز رسانی شده باشند اجرا کنید .  این باعث می شود که گسترش برنامه و به روزرسانی چهارچوب آن بسیار آسانتر شود و تاثیرگذاری کمتری روی برنامه های دیگر در حال اجرا در یک سیستم داشته باشد.

   2. برنامه شما فقط به امکاناتی که واقعا نیاز است وابسته است. شما زمان کمتری را برای تست و گسترش به روزرسانی هایی که شاید نامربوط به برنامه شما باشند مصرف میکنید.

   3. برنامه شما می تواند cross-platform اجرا شود. یک cross-platform نسخه ای از .net core   برای سیستم عامل های Windows ، Linux و mac فراهم خواهیم کرد. نسخه cross-platform هنوز منتشر نشده است.

 

.Net Framework   : در حال حاضرApi    برای .Net core    نسبت به  .netframework محدود تر است ، بنابراین ممکن است نیاز داشته باشید تغییراتی در برنامه خود ایجاد کنید. اگر نمیخواهید برنامه خود را به روزرسانی کنید می توانید روی full .net framework اجرا کنید. زمانی که این کار را انجام می دهید ، به مجموعه ای از API های .net framework دسترسی خواهید داشت.

MVC 6  - یک مدل برنامه نویسی متحد

MVC  ، Web API و  Web page  قابلیت های مکملی را فراهم میکنند و زمانی که یک solution گسترش می یابد ، در کنار هم استفاده می شوند. در  MVC 6  مدلهای مختلفی که در Asp.net  های قبلی استفاده می شدند  در یک مدل برنامه نویسی تک جمع آوری شده اند. شما می توانید برنامه ای ایجاد کنید که  Web API و data Service را بدون نیاز به تطبیق دادن تفاوتها در یک چهارچوب برنامه نویسی بکار گیرد.

علاوه بر آن امکانات جدیدی را سمت سرور به راحتی اضافه میکنیم، مانند ویژگی tag helper جدید. Tag helper  اجازه استفاده از 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  نوشتن View  شما را طبیعی تر و خواناتر میکند . و با آن می توان خروجی را  با اضافه کردن نشانه گذاری ها سفارشی کرد .

توسعه وب های مدرن

امروزه ASP.net 5  شامل تعدادی امکانات توسعه ای بزرگ می شود که ما را قادر می سازد تا برنامه های تحت وب بهتری بسازیم.

توسعه پویا

در ویژوال استودیو 2015    امکان استفاده از مجموعه پویا برای ارائه یک تجربه کارآمد وجود دارد. دیگر لازم نیست برای دیدن هر تغییر برنامه خود را کامپایل کنید. بجای آن فقط کد را ویرایش کرده ، تغییرات را ذخیره کرده ، مرورگر را refresh  کرده و تغییرات را به صورت خودکار مشاهده میکنیم.

 

همچنین می توانید از ویرایشگرهای کد دیگری در پروژه خود در ASP.net 5  استفاده کنید. هر تابعی در ویژوال استودیو با  عملیات (command-line) خط فرمان cross-platform   مطابق است .

 

یکپارچه سازی با ابزارهای محبوب توسعه وب (Bower , Grunt , Gulp)

ویژگی دیگری در ویژوال استودیو ایجاد شده است برای پشتیبانی ابزارهای متن باز  Bower ،  Grunt  ،  Gulp،  که ابزارهای هر برنامه نویس وب می باشند.

     . Bower   یک مجموعه مدیریتی برای کتابخانه های سمت  مشتری است که شامل هر دو کتابخانه های  javascript  و css می شود.

     . Grunt  و Gulp به گردش کار اتوماتیک وب کمک میکنند ، از آنها برای کارهایی مانند  Compiling less ،  CoffeeScript یا فایلهای  TypeScript، اجرا کردن  JSLint یا کوچک کردن   فایلهای  JavaScript استفاده می شود.

 

Bower   : برای اضافه کردن یک کتابخانه  javascript  در یک پروژه  asp.net آن را مستقیما در فایل bower.json اضافه میکنیم.

 

توجه داشته باشید که ویژوال استودیو یک intellisense همراه با لیستی از بسته های قابل دسترس به ما می دهد. دفعه بعدی که Solution  را باز کنید ، ویژوال استودیو به صورت خودکار بسته های از دست رفته را بازیابی میکند، بنابراین نیازی به چک کردن بسته در Source control  ندارید.

برای بسته های سمت سرور همچنان از NuGet Pakage Manager  استفاده میکنید.

Grunt  : در برنامه نویسی وب مدرن برای ساختن برنامه خود  می توانید بسیاری از کارها را خودتان مدیریت کنید: کارهایی مانند  Compiling less ،  CoffeeScript ،   یا فایلهای  TypeScript، اجرا کردن   js unit test  یا کوچک کردن   فایلهای  JavaScript و ... . یک تیم  با توجه به ابزارهای خاصی که استفاده میکنند مجموعه ای از نیازهای خود را دارند.  Task runner  هماهنگی و مدیریت کارها را بسیار آسان کرده است. Visual Studio 2015  از دو task runner با نام های Grunt و Gulp پشتیبانی میکند.

برای مثال می خواهید از Grunt  برای فایلهای  compile less استفاده کنید. به Pakage.json رفته و grunt-contrib-less  را اضافه کنید.

 

از task runner  جدید در ویژوال استودیو برای اتصال task و یک مرحله از ساخت (build step) یا (pre-build , post-build , clean ,  یا زمانی که solution باز شده است ) استفاده کنید .

 

مدیریت وابستگی ساده شده

در Asp.net 5  وابستگی ها با اضافه کردن NuGet Pakages مدیریت می شوند. می توانید از Nuget pakage manager  استفاده کنید یا به سادگی فایل Json را که NuGet  های استفاده شده در پروژه شما را لیست کرده است (Project.json) ویرایش کنید. کار با  فایل Project.json بسیار ساده است و می توانید آن را با هر ویرایشگر متنی ویرایش کنید که شما را قادر به بروز رسانی وابستگی ها در هر زمان میکند .

فایل Project.json مانند شکل زیر می باشد.

 

در ویژوال استودیو 2015  ، intellisense با پیدا کردن بسته های موجود  NuGet که می توانید به عنوان وابستگی اضافه کنید به شما کمک میکند.  

 

Intellisense  حتی می تواند با ورژن های موجود از NuGet به ما کمک کند.

 

 

پیکربندی ابر آماده

در Asp.net 5 ما نیاز استفاده از فایل   Web.config را  برای مقادیر پیکربندی حذف میکنیم. این امکان به وجود آماده است که با استفاده از Cloud   توسعه برنامه ها برای برنامه نویسان آسان تر شود . Cloud  به صورت خودکار  مقادیر پیکربندی درست را برای آن محیط فراهم میکند. سیستم جدید شما را قادر می سازد ، مقادیر نامگذاری شده را از منابع گوناگون درخواست کنید(مانند JSON , XMl,  یا متغیرهای محیطی ). می توانید تصمیم بگیرید که کدام فرمت در موقعیت شما بکار می آید.

در فایل Startup.cs منبع مقادیر پیکربندی را حذف یا اضافه کنید.

 

 

درکد بالا مشاهده میکنید که مقادیر پیکربندی از یک فایل JSON و متغیرهای محیطی بازیابی می شود. در فایل config.json می توان مقادیر را فراهم کرد.

 

در محیط Host مانند Azure ، می توانید متغیرهای محیطی را تنظیم کنید و آن مقادیر به صورت خودکار بجای مقادیر پیکربندی Local استفاده می شوند.

تزریق وابستگی ها (DI)

تزریق وابستگی در چهارچوب های ASP.net   موجود  مانند MVC  ، Web API ، SignalR پشتیبانی می شود اما نه در یک راه جامع و سازگار . ASP.net 5   یک built-in DI abstraction فراهم کرده است که در سراسر پشته وب به صورت سازگار موجود است. می توانید به آن در هنگام راه اندازی سرویس ، در میان افزارهای آن ، در فیلترهای آن ، در کنترلرهای آن ، در مدل اتصال آن و تقریبا در هر بخشی که بخواهید از سرویس خود استفاده کنید ، دسترسی داشته باشید . ASP.net 5    شامل یک DI Container کوچک برای خود راه انداز (Bootstrap) سیستم است، اما به راحتی می توانید آن را با Container  مورد نظر خود (مانند Autofac , Ninject و ... ) عوض کنید. سرویس می تواند Singleton ، متناسب با درخواست یا گذرا باشد.

برای مثال  برای اینکه ببینید چگونه تزریق سازنده با ASP.Net MVC 6 استفاده می شود، یک پروژه در  ASP.net 5  ایجاد کرده و سرویس زمان را به آن اضافه کنید .

using System;
 
namespace WebApplication1
{
    public class TimeService
    {
        public TimeService()
        {
            Ticks = DateTime.Now.Ticks.ToString();
        }
        public String Ticks { get; set; }
    }
}
 

کلاس سرویس tick ها را زمانی که سازنده فراخوانی می شود تنظیم میکند .

سپس ، سرویس زمان (Time Service)  به عنوان یک سرویس گذرا (transient service) در متد  ConfigureServices  از کلاس  startupثبت می شود .

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddTransient<TimeService>();
}

سپس  HomeController برای استفاده از تزریق سازنده و برای نوشتن  tickها زمانی که شیء TimeService  ایجاد شد ، بروزرسانی می شود.

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

public class HomeController : Controller
{
    [Activate]
    public TimeService TimeService { get; set; }
 
    // Code removed for brevity
}

 

MVC 6 از DI  درون Razor View  ها از طریق کلمه کلیدی @inject   پشتیبانی میکند. در کد زیر time Service مستقیما درون View  تزریق شده است و یک خاصیت TimeSvc برای دسترسی به آن تعریف شده است .

@using WebApplication23
@inject TimeService TimeSvc
 
<h3>@ViewBag.Message</h3>
 
<h3>
    @TimeSvc.Ticks From Razor
</h3>

 

زمانی که برنامه را اجراکنید ، مقادیر مختلف tick ها را از کنترلر و  View  مشاهده میکنید.

image

کارایی Fast HTTP

 ASP.Net 5  یک فرایند خطی درخواست HTTP جدید معرفی کرده است که ماژولار است و می توانید فقط اجزایی را که نیاز دارید اضافه کنید. این فرایند خطی وابسته به system.Web نیست و سربار فرایند را کاهش می دهد . این فرایند خطی بر پایه بسیاری از آموخته های پروژه Katana   است و از OWIN پشتیبانی میکند.

برای سفارشی کردن آنکه چه اجزائی در فرایند خطی استفاده شوند  از متد پیکربندی در کلاس  Startup  استفاده می شود. متد پیکربندی برای مشخص کردن میان افزاری که می خواهید در در خواست فرایند خطی استفاده شود  بکار می رود . ASP.net 5 شامل ورژنهایی از تعدادی  میان افزارهای پروژه های KATANA  می شود ، مانند میان افزاری برای فایل های static ، تشخیص هویت و امکانات عیب شناسی .  کد زیر نشان دهنده امکاناتی است که می توانید بر روی فرایند خطی خود در پروژه اضافه یا حذف کنید.

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" });
 
}); 

 

همچنین می توانید میان افزار خود را نوشته و به فرایند خطی اضافه کنید .

دانلود نسخه ی PDF این مطلب