4developers 2015: .net 2015 - co nowego? - michał dudak, future processing

40
Michał Dudak .NET 2015 – co nowego?

Upload: proidea

Post on 15-Jul-2015

139 views

Category:

Software


1 download

TRANSCRIPT

Michał Dudak

.NET 2015– co nowego?

O mnie

Technical Advisor & Internal Trainer @ Future Processing

@michaldudak

github.com/michaldudak

blog.dudak.me

Agenda

.NET Framework 4.6 vs .NET Core 5

C# 6.0 i Roslyn

Visual Studio 2015

ASP.NET 5

Entity Framework 7

.NET 2015

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

.NETFrameworkvs .NET Core

.NET Framework 4.6

Brak rewolucyjnych zmian w stosunku do .NET Framework

4.5

Nowości:

Obsługa ASP.NET 5

Nowy kompilator just-in-time (RyuJIT)

Kontrola nad garbage collectorem

Więcej komponentów z asynchronicznym API

.NET Native dla aplikacji Windows Store

Reference source na licencji MIT

http://sourceof.net

https://github.com/Microsoft/referencesource

.NET Core 5

Mały podzbiór (core) .NET Frameworka

Biblioteki (BCL) + środowisko uruchomieniowe (CoreCLR)

Modularyzacja

BCL dostępny przez NuGet

Open source na licencji MIT (docelowo)

Łącznie z garbage collectorem i JITem

Development prowadzony na GitHubie

CoreCLR

Środowisko uruchomieniowe dla .NET Core

Optymalizacja pod środowiska serwerowe

Możliwość używania wielu wersji na tej samej maszynie

Wieloplatformowość (docelowo)

C# 6.0 i Roslyn

C# 6.0: Elvis operator

?.

C# 6.0: Null-conditional

int? length = null;

if (customers != null)

{

length = customers.Length;

}

int? length = customers?.Length;

C# 6.0: Null-conditional

Customer first = null;

if (customers != null)

{

first = customers[0];

}

Customer first = customers?[0];

C# 6.0: Null-conditional

if (PropertyChanged != null)

{

PropertyChanged(this, args);

}

PropertyChanged?.Invoke(this, EventArgs.Empty);

C# 6.0: Inicjalizatory właściwości

public string EventName { get; set; } = "4Developers"

public string EventName { get; } = "4Developers"

C# 6.0: nameof

nameof(x); // "x"

nameof(Conference.Date); // "Date"

C# 6.0: Filtrowanie wyjątków

try { … }

catch (MyException e)

{

if (e.ErrorLevel <= 2)

throw;

}

try

{ … }

catch (MyException ex) if (ex.ErrorLevel > 2)

{ … }

C# 6.0: Primary constructors

public class Conference

{

public string Name { get; set; }

public string Date { get; private set; }

public Conference(string name, DateTime date)

{

Name = name;

Date = date;

}

}

public class Conference(string name, DateTime date)

{

public string Name { get; set; } = name;

public DateTime Date { get; } = date;

}

public int Add(int x1, int x2)

{

return x1 + x2;

}

public string FullName { get { return FirstName + " " + LastName; } }

public int Add(int x1, int x2) => x1 + x2;

public string FullName => FirstName + " " + LastName;

C# 6.0: Metody i właściwości definiowane przez wyrażenia lambda

C# 6.0: Using klas statycznych

using System.Console;

using System.Math;

public class Program

{

public void Main()

{

WriteLine(Sqrt(3 * 3 + 4 * 4));

}

}

C# 6.0: Interpolacja stringów

String.Format("{0,20} is {1:D3} years old", p.Name, p.Age);

$"{p.Name,20} is {p.Age:D3} years old";

Roslyn

.NET Compiler Platform

C# i Visual Basic

API do użycia w kodzie

Narzędzia do refaktoryzacji i analizy kodu

Aplikacje kompilujące się w locie

Wykorzystywany przez Visual Studio 2015 i ASP.NET 5

Visual Studio

Visual Studio 2015

Emulator urządzeń z Androidem

Zintegrowane narzędzia Apache Cordova

Rozszerzone wsparcie dla Xamarin

Poprawki w edytorze WPF

Nowa wersja edytora Blend

Szersza integracja z Visual Studio

Wsparcie dla narzędzi Grunt, Gulp i Bower

Edycje Express, Community, Professional i Enterprise

Visual Studio Community Edition

Odpowiednik edycji Professional

Jedno IDE dla wszystkich platform

Rozszerzalność

Można używać:

Do nauki

Do projektów open source

Komercyjnie przez pojedynczych developerów i małe firmy

Max. 5 instalacji

Nie można używać:

Komercyjnie przez korporacje

ASP.NET 5

ASP.NET 5: Brak System.Web

Cały ASP.NET poza corem .NETa

Brak handlerów, modułów, Global.asax, itp.

Brak obsługi WebForms

ASP.NET 5: OWIN

ASP.NET 5: Nowa struktura projektów

Project.json

Konfiguracja zależności

Ustawienia specyficzne dla frameworków

Zależności do paczek nuget

Wszystkie pliki z folderu domyślnie w projekcie

Możliwość dołączenia CLR

Brak (prawie) plików web.config

ASP.NET 5: Hostowanie poza IIS

Self-hosting

Custom host

Kestrel

IIS nadal pozostaje rekomendowanym serwerem

ASP.NET 5: Wieloplatformowość

Kestrel

Serwer oparty o libuv

Działa na Mono

Linux, Mac

Docelowo na .NET Core

ASP.NET 5: Narzędzia

Visual Studio 2015

Pluginy do popularnych edytorów kodu

Sublime Text

Brackets

Vim

Atom

Narzędzia konsolowe

dnx

dnu

dnvm

nuget

ASP.NET MVC 6

Połączone MVC, WebAPI i WebPages

Zunifikowane typy, routing, DI

Szerzej wykorzystywane DI

Brak staticów (RouteTable, GlobalConfiguration, itd.)

Kontrolery niewymagające klasy bazowej

Asynchroniczność

Tag Helpers

@Html.TextBoxFor(m => m.Name, new { @class = ”form-control” })

<input asp-for=”Name” class=”form-control” />

ASP.NET 5: Przykład aplikacji

public class Startup

{

public void ConfigureServices(IServiceCollection services)

{

services.AddMvc();

}

public void Configure(IApplicationBuilder app)

{

app.UseStaticFiles();

app.Use(async (ctx, next) =>

{

await ctx.Response.WriteAsync("Hello, 4Developers!");

await next();

});

}

}

EntityFramework 7

Entity Framework 7

Przepisany od zera

Lekki i rozszerzalny

Wieloplatformowy

Aplikacje desktopowe

ASP.NET

Windows Store

Windows Phone

Wsparcie dla baz relacyjnych i NoSQL

Azure Table Storage

Redis

Tylko model Code First

Brak modelu EDMX

Entity Framework 7

Co się nie zmienia

DbContext, DbSet<T>

LINQ

Spora część publicznego API

Co nowego

Łączenie poleceń (batch)

Implementacja constrainta Unique

Provider InMemory

Entity Framework 7

Co się zmienia

Część zapytania przetwarzana w aplikacji

Czego nie będzie

ObjectContext

EDMX

Złożone mapowanie klas do tabel

MEST

Entity Framework 7

Nie wszystkie nowe funkcje będą dostępne od razu

Gałąź 6.x będzie rozwijana niezależnie (przez „pewien czas”)

Pytania

Dziękuję za uwagę

.NET 2015– co nowego?