responsywne aplikacje w windows 8 i .net 4.5
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 PresentationTRANSCRIPT
![Page 1: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/1.jpg)
Responsywne aplikacje wWindows 8 i .NET 4.5
Jakub Binkowski
![Page 2: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/2.jpg)
O mnie
Jakub Binkowski
2008 - 2011
Lead .NET Developer
![Page 3: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/3.jpg)
Agenda
User Experience async
Windows 8 Runtime
Internals i architektura
![Page 4: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/4.jpg)
Responsywność
![Page 5: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/5.jpg)
User Experience!
Dlaczego responsywność?
![Page 6: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/6.jpg)
Projekt UI vs projekt UX
![Page 7: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/7.jpg)
Projekt UI vs projekt UX
![Page 8: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/8.jpg)
Dlaczego UX ma znaczenie?
![Page 9: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/10.jpg)
Dlaczego aplikacje się zawieszają?
Demo
![Page 11: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/12.jpg)
Wywołanie synchroniczne
Operacja I/O
Wątek UI
Urządzenie
![Page 13: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/13.jpg)
Przed i z async
Demo
![Page 14: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/16.jpg)
Kolejne kroki do responsywności
Demo
![Page 17: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/17.jpg)
Async – więcej szczegółów
![Page 18: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/23.jpg)
„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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/24.jpg)
Func<Task<int>> fireAndReturn = async ()=>
{
/**/
return 1;
};
Anonimowy async? Czemu nie!
![Page 25: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/25.jpg)
Windows Runtimeasync
![Page 26: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/27.jpg)
Asynchroniczność w Windows Runtime
Demo
![Page 28: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/28.jpg)
Async w Windows Runtime
![Page 29: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/29.jpg)
IAsync* a Task
IAsyncAction
IAsyncOperation<TResult>
Task
Task<TResult>
![Page 30: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/30.jpg)
Internals, architektura
![Page 31: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/31.jpg)
Na jakim wątku wykona się dalej kod?
Demo
![Page 32: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/35.jpg)
await a Exception
Demo
![Page 36: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/38.jpg)
Wpływ async na architekturę
Demo
![Page 39: Responsywne aplikacje w Windows 8 i .NET 4.5](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062810/56815aae550346895dc8531c/html5/thumbnails/40.jpg)
Dziękuję za uwagę!Pytania?