asp.net mvc 6 - uno sguardo al futuro

31
Andrea Dottor Consulente e sviluppatore Microsoft MVP ASP.NET/IIS ASP .NET MVC 6 uno sguardo al futuro

Upload: andreadottor

Post on 15-Jul-2015

781 views

Category:

Technology


1 download

TRANSCRIPT

Andrea Dottor

Consulente e sviluppatore

Microsoft MVP ASP.NET/IIS

ASP.NET MVC 6

uno sguardo al futuro

ASP.NET Web Form

ASP.NET MVC 5

.NET Framework 4.5.2

Quale scegliere per un nuovo progetto?

Come evolvere un progetto esistente?

Oggi

Il nostro futuro?

.NET 2015

Open source

Familiar .NET Framework APIs

Ecosystem of existing packages

Installed machine-wide

Updated with the OS

ASP.NET 5 full (.NET Framework 4.6)

.NET Core CLR runtime

Optimized for server/cloud

Small footprint

Class libraries in NuGet packages

Side-by-side & portable

Cross-platform: Windows, Linux, Mac

ASP.NET 5 core

Unified programming model Unione di MVC, Web API e Web Pages in un’unica

tecnologia

Eliminazione codice duplicato dal framework

New HTTP request pipeline

Cloud Ready configuration

Depencency Injection

Fast HTTP performance

No Visual Basic.NET (almeno per ora)

ASP.NET MVC 6

File di progetto in JSON project.json

Configurazione in JSON config.json

Packages esterni in JSON package.json

Cartella wwwroot contiene i file staticidel progetto

Integrazione con i più usati Web Development Tools (Bower, Grunt and Gulp)

Nuova struttura di progetto

Modulare Siamo noi a decidere cosa aggiungere

Eliminata dipendenza da System.Web Ogni richiesta con System.Web occupava circa 30K,

mentre ora 2K

System.Web pesa

Darivata dall’esperienza del progetto

Katana project

Supporta OWIN

New HTTP request pipeline

Non è più necessario “forzare” a mano

una compilazione

Ad ogni salvataggio/modifica del codice,

l’applicativo viene subito ricompilato Facilita l’uso di altri editor per lo sviluppo di

applicazioni ASP.NET

Offre un’esperienza simile a quella offerta dall’uso di

linguaggi interpretati

Roslyn compiler

#if ASPNET50

return heroes.FirstOrDefault(h => h.Id == id);

#elif ASPNETCORE50

foreach (var item in heroes)

{

if (item.Id == id)

return item;

}

return null;

#endif

Compilazione condizionale

demo

Addio al “vecchio” web.config

File di configurazione semplificato

Solo la configurazione realmente utile

all’applicazione

Cross-platform

Integrato con la configurazione di Azure

Cloud-ready configuration

Configurazione. Il formato lo decidiamo noi

config.json{

"ConnectionStrings": { "JsonConnectionString": "json connection string"

} }

config.xml<config>

<ConnectionStrings><XmlConnectionString>xml connection string</XmlConnectionString>

</ConnectionStrings></config>

config.ini[ConnectionStrings] IniConnectionString = ini connection string

Estende/arricchisce i tag HTML con

attributi che vegono eseguiti server-side

In alcuni casi facilitano la scrittura del

markup

Tag helpers

@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>

demo

DI implementato out of the box.

BYOC (Bring Your Own Container) Autofac, Ninject, Unity, Windsor, …

Gestisce vari tipi di Lifestyle Instance

Una nuova istanza viene creta ogni volta. Siamo noi a specificare come creare l’istanza (parametri nel costruttore).

Transient Una nuova istanza viene creta ogni volta

Singleton Viene creta una singola istanza, e viene ritornata sempre

quella

Scoped Viene creta un’istanza per ogni richiesta.

Dependency Injection

Tramite injection nel costruttore Viene in automatico risolto il tipo richiesto

Tramite proprietà decorata con

l’attributo [Activate] Utile quando non possiamo modificare il costruttore

Dependency Injection

Le funzionalità che erano presenti nella

dll System.Web ora sono state

implementate come packages nuget

separati

Esempio la Cache https://github.com/aspnet/Caching

Esempio la Session https://github.com/aspnet/Session

Cache, Session

demo

Simili alle PartialView Ma molto meglio.

Composti da Una classe di “code-behind” simile ad un mini

controller

La classe eredita da ViewComponent e si deve

implementare il metodo Invoke

Una view che ne definisce la visualizzazione

Possibilità di esserre invocate in async

View components

@Component.Invoke("TagList")

Possibilità di iniettare una classe

all’interno delle View per poterne

richiamare i metodi

Dichiarare il servizio in fase di Startup services.AddTransient<TodoList.Services.StatisticsService>();

Dichiarare la classe @inject TodoList.Services.StatisticsService Statistics

Usarla richiamandone i metodi @await Statistics.GetCount()

Injecting a service

Con codice sorgente Viene copiato il codice sorgente dell’applicazione

Con precompilazione Il codice dell’applicazione viene compilato e risulta

nella cartella di output come packages

Pubblicazione

demo

Applicazioni ASP.NET WebForm potranno girare solamente nel .NET Framework 4.6

non potranno essere portate ad ASP.NET 5

non potranno girare con il .NET Core.

E le applicazioni esistenti?

Applicazione esistenti ASP.NET MVC possono essere eseguite senza modifiche sul .NET

Framework 4.6.

migrare ad ASP.NET 5/MVC 6 comporta la riscrittura

La difficolta dipende da quanto l’applicazione è legata a

System.web e dalle API utilizzate

E le applicazioni esistenti?

API Portability Analyzer Tool che analizza la API utilizzate dall’applicazione, e

permette di fare una prima analisi http://www.microsoft.com/en-us/download/details.aspx?id=42678

E’ disponibile un’estensione per Visual Studio che

genera il report https://visualstudiogallery.msdn.microsoft.com/1177943e-cfb7-4822-a8a6-e56c7905292b

E le applicazioni esistenti?

http://weblogs.asp.net/scottgu/introducing-asp-net-5

http://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview

http://blogs.msdn.com/b/dotnet/archive/2014/12/04/introducing-net-

core.aspx

http://blogs.msdn.com/b/cesardelatorre/archive/2014/11/18/what-is-net-

core-5-and-asp-net-5-within-net-2015-preview.aspx

http://blogs.msdn.com/b/bethmassi/archive/2015/02/25/understanding-

net-2015.aspx

http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-

injection-in-asp-net-vnext.aspx

http://blogs.msdn.com/b/webdev/archive/2015/02/23/aspnet-5-

updates-for-feb-2015.aspx

http://forums.asp.net/1255.aspx/1?ASP+NET+5+Preview+

Links

feedback

10

• Materiale: – http://blog.dottor.net/files/xedotnet/20150313_Dottor.

MVC6_code.zip

– http://blog.dottor.net/files/xedotnet/20150313_Dottor.

MVC6_slide.zip

Email: [email protected]

Website: http://www.dottor.net

Blog: http://blog.dottor.net

Twitter: http://twitter.com/dottor

Contatti