تغییرات mvc 6 نسبت به mvc 5

تغییرات mvc 6 نسبت به mvc 5

اگر مدتی رو به بررسی MVC 5,6 اختصاص بدهید ، به تغییرات جالب و عمیقی پی خواهید برد که در نسخه بتای ورژن ۵ گذاشته شده است. باید به این نکته اعتراف کرد که نسخه ۵ ، یک نسخه بسیار مناسب و دارای تغییرات مهمی است و میتوان آنرا به یک نسخه بسیار تاثیر گزار در تاریخچه فریم ورکهای ASP.NET MVC قلم داد کرد . باید گفت که بر اساس گفته ماکروسافت ، این نسخه تقریبا از صفر نوشته شده است .
در این مقاله ؛ به ۱۰ تغییر مهم ورژن ۵ و ۶ خواهیم پرداخت . امیدوارم اگر شما هم به نکته ای بیشتر از این ۱۰ تا پی بردید ، اونها رو با من و بقیه به اشتراک بزارید .


1- امکان قرارگیری بر بستر Linux و OSX

برای اولین بار در تاریخ ASP.NET ، شما میتوانید تولیدات خود در این بستر را روی Linus و OSX اجرا کنید و این میتونه جمع بیشتری از برنامه نویسها رو به این محصول جزب کنه .
اکثر برنامه نویسهای قدیمی ماکروسافت و ASP.NET ، در محیطهای بزرگ و شرکتها کار میکنند یا بستر کاری خودشون رو مبتنی بر Windows از آماده کردند، ولی خیلی از کسانی که تازه قصد دارند وارد بشوند ، محصولات Apple و …. رو استفاده میکنند. حتی بر اساس مشاهدات ، برنامه نویسان دات نتی هم بیرون از محل کارشون علاقه من به استفاده از مثلا Macbook هستند. در یک کنفرانس دات نت ، همه لپ تاپهای ویندوزی به دست داشتند ، ولی در یک کنفرانس Jqeury چی ؟!. همه با Macbook و … شرکت کرده بودند . لذا ماکروسافت خواست این دسته از برنامه نویسان رو هم به جرگه دوستداران و طرفداران خودش اضافه کنه . ایجاد این امکان برای ASP.NET که بتواند روی Linux و … اجرا شود خیلی چیزها رو تغییر خواهد داد . برای اولین بار همه برنامه نویسان میتونن روی هر پلتفرمی برنامه نویسی رو با ASP.NET 5 شروع کنند و در عین حال میتونن محیط و سخت افزار و نرم افزار مورد علاقه خودشون رو هم استفاده کنند . در ضمن باید به این نکته اشاره کرد که امکان استفاده از محیطهای دیگه مثل Sublime text و WebStorm و لزوما استفاده نکردن از محیط Visual Studio هم امکان پذیر شده است .برای بررسی این موضوع ، بهتره نگاهی به پروژه OmniSharp بزنید تا متوجه چگونگی استفاده از ابزارهایی مثل Sublime و Atomو Emacs یا Brackets در روند توسعه پروژه‌های ASP.NET از طریق اونها بشید .

Sublime Text, Atom, Emacs, and Brackets with ASP.NET 5: http://www.omnisharp.net/

2- WebForm تمام شد !.
اگر نتوانم ادعا کنم ، هزاران ساعت از عمر من طرف WebForm شد ، در صدها ساعت شکی وجود ندارد و من به شخصه دوستش داشتم ولی الان دیگر وقت خداحافظی است . در نسخه ۵ از ASP.NET دیگر Webform وجود نخواهد داشت . حتی در VS2015 هم شما میتوانید به کارتون با WebForm ادامه بدهید ، ولی باید ورژن ۴٫۶ را انتخاب کنید و اپلیکیشن شما دیگر از قابلیتهای ورژن ۵ که در همین مقاله گفته خواهد شد ، بهره ای نخواهد برد . اگر دوست ندارید از این داستان عقب بمانید ، کم کم وقتشه که پروژه هاتون رو بازنویسی کنید و به MVC کوچ کنید .
با Visual Basic هم خداحافظی کنید !.
بله درست شنیده اید !. در نسخه ۵ و به بالا ، دیگر Visual Basic هم وجود ندارد و فقط C# ساپورت خواهد شد . آرزوی ماکروسافت این است که این تغییر خیلی دردناک نباشد . ظاهرا فقط ۲ نفر در جهان از VB برای توسعه MVC استفاده میکنند و خوب طبیعتا اونها هم باید VB را فراموش کنند . به هر حال ظاهرا یک Convertor هم وجود دارد .

3- Tag Helpers

تگ هلپر‌ها یکی از بزرگترین و تاثیر گزار‌ترین ابزارهایی هستند که در ساختن View شما نقش دارند . تگ هلپر‌ها جایگزینهای خوبی هستند تا به جای هلپرهای قدیمی استفاده شوند .
این View را که میتواند یک فرم در یک پروژه باشد بررسی میکنیم :
در این View که در بالا میبینید ،

Html.BeginForm(), Html.LabelFor(),Html.TextBoxFor

استفاده میشوند تا فرم ما ساخته شود . این تگها ، برای یک طراح HTML و محیط طراحی ما زیاد شناخته شده نیست . حالا پایینی رو نگاه کنید که از Tag Helper‌ها استفاده کرده.
ببینید ، این ورژن فقط حاوی المانهای HTML است . برای مثال ، این فرم حاوی INPUT است به جای اینکه Html.TextBoxFor() داشته باشد . طراحهای HTML این شکل را بیشتر دوست خواهند داشت . تنها چیزی که در این فرم خاص به نظر میاد Attribute مخصوص ASP است که صبب میشود این تگها خاصیت Server Side پیدا کنند و قابلیت Tag‌های MVC را داشته باشند .به مثالهایی که در لینک زیر هست نگاه کنید، در اینجا فقط از این Tag Helper‌ها استفاده شده است.

 

https://github.com/DamianEdwards/TagHelperStarterWeb

4- View Components
با Subcontroller‌ها خداحافظی کنید و به Viewcomponent‌ها بپردازید!.
در ورژنهای قبلی شما HTML.Action داشتید تا بتوانید یک Subcontroller را صدا بزنید . برای مثال تصور کنید لازم است یک بنر تبلیغاتی در چند View نمایش داده شود . در این موقعیتها ، شما یک Subcontroller خواهید ساخت که حاوی کدهای لازم استخراج محتوای بنر خواهد بود و سپس شما Subcontroller را به وصیله یک HTML.Action() درون View صدا خواهید زد .
Subcontoller‌ها – Html.Action() دیگر در ورژن بتای MVC6 وجود ندارد و به جای آن یک تکنولوژی جایگزین که View Component نام دارد وجود دارد . حالا به مثال نگاه کنید تا ببینیم یک View component چگونه یکی از بنرها را بر اساس بازه زمانی لازم در یک روز نمایش خواهد داد.
مثال را با دقت نگاه کنید ، اگر ساعت قبل از ۵ بعد از ظهر باشد View component یک Partial که _Advertisement نام دارد را صدا خواهد کرد و شما متن “Buy more coffee!” را خواهید دید و اگر زمان بعد از آن بود شما “Buy more coffee!” را خواهید دید .
این هم محتوای _Advertisement partial
و این هم شکل استفاده از BannerAd View Componentدر یک MVC View
شباهت زیادی بین ViewComponet و Subcontroller وجود دارد ولی Subcontroller‌ها اندکی غیر عادی و بدشکل به نظر میآمدند . آنها ظاهرا Controller بودند در صورتی که در واقع این قابلیت را نداشتند . Viewcomponent‌ها طبیعیتر و ساده‌تر به نظر خواهند آمد.

 

GruntJS, NPM, and Bower Support-5
این بستر JS هم در MVC5 و MVC6 ساپورت خواهد شد . جهت اطلاعات بیشتر به : http://gruntjs.com/plugins
به دلیل ساپورت تعداد زیادی از بسترهای Javascript و ….. ، شاید این قابلیت زیاد هیجان بر انگیز نباشد ،ولی ظاهرا گروهی از طراحان ، به این بستر Javascript علاقه زیادی نشان داده اند.


6-متحد کردن MVC و WebApi Controller ها
در نسخه‌های قبلی از ASP.NET MVC، کنترل MVC از کنترل WebApiجدا بود. کنترل MVC کلاس پایه System.Web.MVC.Controller را استفاده میکرد و کنترل وب API با استفاده از کلاس پایه System.Web.Http.ApiController استفاده می‌شد .
در MVC6 فقط و فقط یک Controller برای هر MVC و WebApi وجود خواهد داشت و هر ۲ از یک کلاس پایه به نام Microsoft.AspNet.Mvc.Controller ارث بری خواهند کرد.
کنترلر MVC6 یک IActionResult باز میگرداند . وقتی MVC controller استفاده شود ؛ این IActionResult یک View خواهد بود و اگر Web API controllerاستفاده شده باشد ، این IActionResult به صورت Data خواهد بود.مثلا یک لیست از محصولات .یک کنترلر دیگر ممکن است دارای اکشنی باشد که هر ۲ را برگرداند یعنی هم View هم Data .
از لحاظ Routing هم MVC و WebApi از یک Route استفاده میکنند . شما میتوانید از یک convention-based یا یک attribute routes در کل پروژه و برای هر همه کنترلرهای موجود در پروژه به صورت مشترک استفاده نمایید .


7- AngularJs
AngularJS یکی از فریم ورکهای خیلی قوی و معروف است که امروزه بسیار مورد توجه قرار گرفته . مخصوصا که پروژه‌های SPA میتواند مبتنی بر این بستر به آسانی توسعه یابد . VS2015 دارای امکان ایجاد AngularJS modules, controllers, directives, and factories. درون Template‌های خود میباشد که کار را برای تولید MVC 6 controller مبتنی بر AngularJS $resource و REST بسیار ساده نموده است .


8- ASP.NET Dependency Injection Framework
نسخه ۵ از MVC دارای یک ساپورتر درونی از Dependency Injection درون خود میباشد همانطور که یک Service locator درونی هم به همراه خود دارد . این بدین معنا است که شما نیازی به استفاده از بسترهای ثالثی مانند Ninject یا AutoFac نخواهید داشت.
فرض کنیم شما یک Interface جدید به نام IRepository بسازید و همراه آن کلاسی به اسم EFRepository که از این اینترفیس ، ارث بری کرده است . خوب در این حالت شما میتوانید کلاس رو به اینترفیس Bind کنید و این کار درون متد ConfigureServices() از کلاس Startup.cs انجام خواهد شد .
بعد از انجام عمل Binding شما میتوانید از یک متد سازنده در Dependency Injection در کنترلر MVC یا شاید دیگر کلاسها استفاده کنید .
در کد بالا ، اینترفیس IRepository به متد سازنده Product پاس داده شده است. سیستم درونی MVC در این ورژن عملا EFRepository را به ProductsController پاس خواهد داد زیرا که IRepository به EFRepositoryبایند شده است .
عملا شما در هر جایی که به HttpContext دسترسی داشته باشید ، به هر سرویس ثبت شده ای دسترسی دارید شما میتوانید از EFRepository به شکلی که در زیر امده استفاده کنید و این یعنی استفاده و بهره برداری از Service Locator pattern .


9 – Xunit.net
با Unit Testing Frameworkموجود در VS خدافظی کنید و به سراغ Xunit.Net بروید.

language
email