Responsywne aplikacje w Windows 8 i .NET 4.5

40
Responsywne aplikacje w Windows 8 i .NET 4.5 Jakub Binkowski

description

Responsywne aplikacje w Windows 8 i .NET 4.5. Jakub Binkowski. O mnie. Jakub Binkowski. 2008 - 2011. Lead .NET Developer. Agenda. User Experience. async. Windows 8 Runtime. Internals i architektura. Responsywność. Dlaczego responsywność ?. User Experience !. - PowerPoint PPT Presentation

Transcript of Responsywne aplikacje w Windows 8 i .NET 4.5

Page 1: Responsywne  aplikacje w Windows 8 i .NET 4.5

Responsywne aplikacje wWindows 8 i .NET 4.5

Jakub Binkowski

Page 2: Responsywne  aplikacje w Windows 8 i .NET 4.5

O mnie

Jakub Binkowski

2008 - 2011

Lead .NET Developer

Page 3: Responsywne  aplikacje w Windows 8 i .NET 4.5

Agenda

User Experience async

Windows 8 Runtime

Internals i architektura

Page 4: Responsywne  aplikacje w Windows 8 i .NET 4.5

Responsywność

Page 5: Responsywne  aplikacje w Windows 8 i .NET 4.5

User Experience!

Dlaczego responsywność?

Page 6: Responsywne  aplikacje w Windows 8 i .NET 4.5

Projekt UI vs projekt UX

Page 7: Responsywne  aplikacje w Windows 8 i .NET 4.5

Projekt UI vs projekt UX

Page 8: Responsywne  aplikacje w Windows 8 i .NET 4.5

Dlaczego UX ma znaczenie?

Page 9: Responsywne  aplikacje w Windows 8 i .NET 4.5

Cechy responsywnej aplikacji

1. Aplikacja nie zawiesza się2. Natychmiastowa odpowiedź3. Postęp pracy / czas do zakończenia /

„kręciołek”4. Możliwość przerwania pracy

Page 10: Responsywne  aplikacje w Windows 8 i .NET 4.5

Dlaczego aplikacje się zawieszają?

Demo

Page 11: Responsywne  aplikacje w Windows 8 i .NET 4.5

public void LoadGroups()

{

var client = new DataServiceClient();

var groups = client.GetGroups();

foreach (var group in groups)

{

this.Groups.Add(new GroupViewModel(group));

}

}

Wywołanie synchroniczne

Page 12: Responsywne  aplikacje w Windows 8 i .NET 4.5

Wywołanie synchroniczne

Operacja I/O

Wątek UI

Urządzenie

Page 13: Responsywne  aplikacje w Windows 8 i .NET 4.5

Przed i z async

Demo

Page 14: Responsywne  aplikacje w Windows 8 i .NET 4.5

public async Task LoadGroupsAsync()

{

var client = new DataServiceClient();

var groups = await client.GetGroupsAsync();

foreach (var group in groups)

{

this.Groups.Add(new GroupViewModel(group));

}

}

Jak działa async(w aplikacjach UI)?

Page 15: Responsywne  aplikacje w Windows 8 i .NET 4.5

Operacje asynchroniczne(w aplikacjach UI)

Operacja I/O

Wątek UI

Urządzenie

Dotknięcie ekranuKliknięcie przycisku

To jest aplikacja jednowątkowa!

Page 16: Responsywne  aplikacje w Windows 8 i .NET 4.5

Kolejne kroki do responsywności

Demo

Page 17: Responsywne  aplikacje w Windows 8 i .NET 4.5

Async – więcej szczegółów

Page 18: Responsywne  aplikacje w Windows 8 i .NET 4.5

Operacje asynchroniczne(w aplikacjach UI) - przypomnienie

Operacja I/O

Wątek UI

Urządzenie

Page 19: Responsywne  aplikacje w Windows 8 i .NET 4.5

public async Task LoadGroupsAsync()

{

var client = new DataServiceClient();

var groups = await client.GetGroupsAsync();

foreach (var group in groups)

{

Groups.Add(group);

}

}

Jak działa async(w aplikacjach serwerowych)?

Page 20: Responsywne  aplikacje w Windows 8 i .NET 4.5

Operacje asynchroniczne(w aplikacjach serwerowych)

Operacja I/O

Wątek 1

Urządzenie

Wątek 2

Wiele wątków ≠ wielowątkowość!

Page 21: Responsywne  aplikacje w Windows 8 i .NET 4.5

public Task LoadGroupsAsync()

{

var client = new DataServiceClient();

var getGroupsTask = client.GetGroupsAsync();

getGroupsTask.ContinueWith(t =>

{

var groups = t.Result;

foreach (var group in groups)

{

Groups.Add(new GroupViewModel(group));

}

},

TaskScheduler.FromCurrentSynchronizationContext());

return getGroupsTask;

}

Co zrobi kompilator?

Uwaga! Bardzo duże uproszczenie.

Page 22: Responsywne  aplikacje w Windows 8 i .NET 4.5

public async void FireAndForget() { /*...*/ }

 

public async Task FireAndRemember() { /*...*/ }

 

public async Task<int> FireAndReturn()

{

/*...*/

return 1;

}

Metody async

Page 23: Responsywne  aplikacje w Windows 8 i .NET 4.5

„Fire and forget”

Przeznaczenie: Event handlery Kompatybilność

wstecz

async Task vs async void

Można poczekać na zakończenie wykonania (i sprawdzić np. exception)

async void Xxx()

async Task Xxx()

Page 24: Responsywne  aplikacje w Windows 8 i .NET 4.5

Func<Task<int>> fireAndReturn = async ()=>

{

/**/

return 1;

};

Anonimowy async? Czemu nie!

Page 25: Responsywne  aplikacje w Windows 8 i .NET 4.5

Windows Runtimeasync

Page 26: Responsywne  aplikacje w Windows 8 i .NET 4.5

Async w Windows Runtime

Fundamentals

Authentication Cryptography Globalization .NET Win32App Lifetime

Communications & Data

Contracts XML Web

Networking Notifications

Local & Cloud StorageMedia

Capture

PlayTo

Devices

Sensors

GeolocationPortable Devices

NFC

User Interface

HTML5 / CSS XAML DirectX Controls

Input Accessibility Printing

Data Binding

Tiles

Streams

Background Transfer

SVG

AtomPub

SMS

Printer

Visual Effects

Transcoding

Page 27: Responsywne  aplikacje w Windows 8 i .NET 4.5

Asynchroniczność w Windows Runtime

Demo

Page 28: Responsywne  aplikacje w Windows 8 i .NET 4.5

Async w Windows Runtime

Page 29: Responsywne  aplikacje w Windows 8 i .NET 4.5

IAsync* a Task

IAsyncAction

IAsyncOperation<TResult>

Task

Task<TResult>

Page 30: Responsywne  aplikacje w Windows 8 i .NET 4.5

Internals, architektura

Page 31: Responsywne  aplikacje w Windows 8 i .NET 4.5

Na jakim wątku wykona się dalej kod?

Demo

Page 32: Responsywne  aplikacje w Windows 8 i .NET 4.5

Czy skoro można wywołać na: Task IAsyncAction/Operation

to czy można wywołać na czymś jeszcze innym?

Pytanie

Page 33: Responsywne  aplikacje w Windows 8 i .NET 4.5

await – na czym można „czekać”?

public class MyClass

{

public MyAwaiter GetAwaiter() { /*..*/ }

}

 

public class MyAwaiter : INotifyCompletion

{

public bool IsCompleted

{

get {/*...*/}

}

 

public void GetResult() {/*..*/}

 

public void OnCompleted(Action continuation)

{/*..*/}

}

var my = new MyClass();await my;

Może też byćextension method

Page 34: Responsywne  aplikacje w Windows 8 i .NET 4.5

Co będzie w zmiennej type?

var task = Task.Run<int>( new Func<int>(() => { throw new Exception(); }));try{ await task;}catch (Exception ex){ string type = ex.GetType().Name;}

var task = Task.Run<int>( new Func<int>(() => { throw new Exception(); }));task.ContinueWith(t => { try { var res = t.Result; } catch (Exception ex) { string type = ex.GetType().Name; } });

Page 35: Responsywne  aplikacje w Windows 8 i .NET 4.5

await a Exception

Demo

Page 36: Responsywne  aplikacje w Windows 8 i .NET 4.5

private async void Button_Click_1(object sender,

RoutedEventArgs e)

{

var wc = new WebClient();

var data = await wc.DownloadDataTaskAsync(tb.Text);

//...

}

Czy tak piszemy aplikacje?

Page 37: Responsywne  aplikacje w Windows 8 i .NET 4.5

Wzorce, np. MVVM? Warstwy: logiki biznesowej, dostępu do danych?

Co z tą architekturą?

Page 38: Responsywne  aplikacje w Windows 8 i .NET 4.5

Wpływ async na architekturę

Demo

Page 39: Responsywne  aplikacje w Windows 8 i .NET 4.5

async – okiełznanie asynchroniczności

W .NET – nowe metody W Windows Runtime – jedyny model Wpływ na architekturę

Podsumowanie

Page 40: Responsywne  aplikacje w Windows 8 i .NET 4.5

Dziękuję za uwagę!Pytania?