10 تغییر اساسی در Asp.net5 و MVC6
شنبه 25 مهر 1394در این مقاله به 10 تغییر که در Asp.net 5 صورت گرفته ( نسبت به نسخه قبل) اشاره می کنیم. یاد خواهید گرفت که چه ویژگی های جدیدی به این نسخه ها افزوده شده است و اینکه چه تفاوتی با نسخه های پیشین دارند.
در این مقاله به 10 تغییر که در Asp.net 5 صورت گرفته ( نسبت به نسخه قبل) اشاره می کنیم.
1- ASP.NETدر OSX و Linux
برای اولین بار در تاریخ Asp.net این برنامه میتواند بر روی لینوکس و OSX اجرا شود.با این کار کلیه برنامه نویسان و طراحان می توانند از ASP.NET استفاده کنند.
مخاطبان سنتی ASP.NET برنامه نویسانی بودند که در شرکت های بزرگ کار می کردند و مشتری های این شرکت ها هم دارای سیستم های ویندوزی بودند.ولی مثلا در StartUp تمایل دارند که از سیستم های لینوکس و OSX استفاده کنند.هر وقت من در کنفرانس های StartUp شرکت می کنم تنها سیستمی که می بینم Macbook است .عکس زیر از کنفرانس jQuery این شرکت گرفته شده است
توانایی Asp.net5 برای اجرا روی سیستم های ویندوز ، لینوکس و OSX همه چیز را تغییر می دهد.برای اولین بار هر طراح و برنامه نویسی قادر خواهد بود برای اپلیکیشن های خود از Asp.net5 استفاده کند.همچنین آنها مجبور به استفاده از Visual Studio نیستند و می توانند محیط توسعه دلخواه خود مانند WebStorm و یا Sublime Text را انتخاب کنند.
2-فارغ از Web Forms
خود من عاشق Web Forms هستم.صدها شاید هم هزارها برنامه وب فرم نوشته ام ولی الان باید به آن گفت خداحافظ! Web Formsدیگر بخشی از Asp.net5 نیست.شما می توانید همچنان به ساخت وب فرم ها ادامه دهید اما در ویژوال 2015 و با .NET4.6
اما این را بدانید که وب فرم هیچ مزیتی نسبت به ویژگیهای جدید Asp.net5 ندارد و برای اینکه از دنیای برنامه نویسی عقب نیافتید برنامه های وب فرم خود را به روش ASP.NET MVC بازنویسی نمایید.
3-فارغ از Visual Basic
در Asp.net5 از ویژوال بیسیک هم اثری نیست. Asp.net5 تنها از C# پشتیبانی می کند.امیدوارم که این تغییر شما را زیاد ناراحت نکرده باشد.من معتقدم که تنها دو نفر در کل دنیا هستند که پروژه MVC را با زبان Visual Basic می نویسند! برای همان دو نفر هم بهتر است که دست از این کار بردارند .البته تبدیل کننده های بیسیک به سی شارپ هم وجود دارند .
4- Tag Helper ها
این تگ ها جایگزینی برای Helper های سنتی MVC هستند.
در کد زیر یک فرمی داریم که کار آن ایجاد یک محصول جدید است
@model MyProject.Models.Product
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => p.Name, "Name:")
@Html.TextBoxFor(m => p.Name)
</div>
<input type="submit" value="Create" />
}
در کد بالا Html.BeginForm(), Html.LabelFor(), Html.TextBoxFor در واقع helper هایی هستند که برای ایجاد فرم استفاده شده اند این Helper ها برای کسانی که با Html کار کرده اند ناآشنا است. حال همان فرم بالا را به کمک Tag Helper ها بازنویسی می کنیم.
@model MyProject.Models.Product
@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers"
<form asp-controller="Products" asp-action="Create" method="post">
<div>
<label asp-for="Name">Name:</label>
<input asp-for="Name" />
</div>
<input type="submit" value="Save" />
</form>
اگر دقت کرده باشید می بینید که Tag Helper بسیار شبیه Html است .مثلا به جای استفاده از Html.TextBoxFor از input استفاده شده است.در این کد از asp-for استفاده شده است و دلیل آن استفاده از آن Helper در سمت سرور می باشد.
5- View Components
به جای SubController جایگزین دیگری قرار گرفته است به نام View Component.در نسخه های قبلی Mvc برای فراخوانی یک Action از Html.Action استفاده می کردیم ولی دیگر نیازی به این کار نیست.
کد زیر نحوه ساخت یک View Component را نشان می دهد.
using Microsoft.AspNet.Mvc;
using System;
namespace Partials.Components
{
public class BannerAd : ViewComponent
{
public IViewComponentResult Invoke()
{
var adText = "Buy more coffee!";
if (DateTime.Now.Hour > 18)
{
adText = "Buy more warm milk!";
}
return View("_Advertisement", adText);
}
}
}
با توجه به کد اگر قبل از ساعت 6 بعد از ظهر باشیم View Component یک متنی به صورت Buy more coffee! بر می گرداند واگر بعد از ساعت 6 باشد متن به صورت Buy more warm milk! خواهد بود .
کد مربوط به صفحه Partial به صورت زیر خواهد بود.
@model string
<div style="border:2px solid green;padding:15px">
@Model
</div>
برای استفاده از View Component کد زیر را استفاده می کنیم .
@Component.Invoke("BannerAd")
6- GruntJS, NPM و پشتیبانی Browser
کسانی که طراح هستند از اینکه Asp.net5 از Gruntjs پشتیبانی می کند بسیار خوشحالند.
Gruntjs یک Task Runner است که وظیفه جاوا اسکریپت را اجرا می کند.و بسیاری از کارهای طراحی وب را خودکار می کند.برای اینکه Asp.net5 از Gruntjs پشتیبانی کند نیاز داشت که دو کار انجام دهد.یک پشتیبانی از NPM چون پلاگین های GruntJS توزیعی از پکیجی NPM هستند. و دومی Browser
۷ – یکپارچه کردن MVC و کنترلرهای WebAPI
در نسخه های قبلی mvc کنترلر های mvc و Web API با هم متفاوت بودند. کنترلرهای MVC در کلاس پایه System.Web.MVC.Controller بود و کنترلرهای Web Api در کلاس پایه System.Web.Http.ApiController بودند.اما در mvc6 فقط یک کلاس به نام Microsoft.AspNet.Mvc.Controller برای هردو اینها وجود دارد.در mvc6 هر کنترلری یک IActionResult بر می گرداند که بسته به اینکه شما از کدام کنترلر استفاده کنید تغییر می کند یعنی اگر به عنوان یک کنترلر MVC استفاده شوند به شکل یک View خود را نمایش می دهند و اگر به عنوان کنترلر Web Api استفاده شوند به شکل دیتا خود را نشان می دهند.
کنترلر های MVC6 چه از نوع MVC و چه از نوع Web Api توسط rout یکسان مدیریت می شوند.
۸ – AngularJS
AngularJS یکی از معروفترین فرم ورک ها سمت کلاینت برای توسعه برنامه های SPA و با همان Single Page Application هستند. ویژوال استودیو ۲۰۱۵ شامل Template هایی برای ساختن ماژول ها(modules)، کنترلرها(controllers) و (directives) و (factories) است.
پشتیبانی ASP.NET 5 از GruntJS باعث شده که ASP.NET یک فریم ورک سمت سرور عالی برای ایجاد اپلیکیشن های سمت کلاینت AngularJS باشد.
9- Dependency Injection در Asp.net5
Asp.net5 از Service Locator و DI پشتیبانی می کند. پس دیگر نیازی به استفاده از یک فرم ورک خارجی برای DI نیست.
فرض کنید که یک اینترفیس IRepository و یک کلاس EFRepository ایجاد کرده اید که قرار است اینترفیس شما را پیاده سازی کند. در این مثال شما میتوانید کلاس EFRepository را به اینترفیس IRepository در متد ConfigureService() موجود در Startup.cs بایند کنید،کد ان مانند زیر است :
services.AddTransient<IRepository, EFRepository>();
بعد از اینکه EFRepository و Irepository را بایند کردید میتوانید از constructor متعلق به DI در کنترلرهای MVC (یا هر کلاس دیگر) به طریق زیر استفاده کنید
public class ProductsController : Controller
{
private IRepository _repo;
public ProductsController(IRepository repo)
{
_repo = repo;
}
}
در کد فوق اینترفیس Irepository به داخل کانسترااکتور یک کنترلر پاس داده می شود . فریم ورک DI درونی ASP.NET ، باعث می شود که EFRepository به ProductsController پاس داده شود ، چون پیش از این در کلاس Startup اینترفیس Irepository به EFRepository بایند شده است.
همچنین می توانید از الگوی Service Locator استفاده کنید. هر جا به HttpContext دسترسی داشته باشید، می توانید به هر نوع سرویس رجیستر شده دسترسی داشته باشید. برای مثال می توانید EFRepository را به کمک کد زیر درون یک اکشن، بازیابی کنید.
var repo = this.Context.ApplicationServices.GetRequiredService<IRepository>();
10- xUnit.net
Unit test از دو Attribute به نام های [TestClass] و[TestMethod] استفاده می کند مانند کد زیر
[TestClass]
public class CalculatorTests {
[TestMethod]
public void TestAddNumbers() {
// Arrange
var calc = new Calculator();
// Act
var result = calc.AddNumbers(0, 0);
// Assert
Assert.AreEqual(0, result);
}
}
وقت خداحافظی با Unit Test در ویژوال استودیو است.در ASP.NET 5 از xUnit.net به عنوان فرم ورک تست استفاده می شود. این این فریم ورک از اتریبیوت [Fact] به جای [TestMethod] استفاده میکند
public class CalculatorTests
{
[Fact]
public void AddNumbers()
{
// Arrange
var calculator = new Calculator();
// Act
var result = calculator.AddNumbers(1, 1);
// Assert
Assert.Equal(result, 13);
}
}
- ASP.net
- 2k بازدید
- 9 تشکر