Nowoczesna architektura w aplikacjach Windows Store

24
Nowoczesna architektura w aplikacjach Windows Store Wojciech Poniatowski

description

Nowoczesna architektura w aplikacjach Windows Store. Wojciech Poniatowski. Wojciech Poniatowski. Head of Windows Developer @ iApps Technologies MVP MCT, MCPD Śląska Regionalna Grupa Microsoft Prelegent Autor webcastów. O co chodzi ?. Narzędzia Frameworki Abstrakcja Wzorce MVVM - PowerPoint PPT Presentation

Transcript of Nowoczesna architektura w aplikacjach Windows Store

Page 1: Nowoczesna architektura w aplikacjach Windows Store

Nowoczesna architektura w

aplikacjach Windows Store

Wojciech Poniatowski

Page 2: Nowoczesna architektura w aplikacjach Windows Store

Wojciech Poniatowski

• Head of Windows Developer @ iApps Technologies• MVP• MCT, MCPD• Śląska Regionalna Grupa Microsoft• Prelegent• Autor webcastów

Page 3: Nowoczesna architektura w aplikacjach Windows Store

O co chodzi?

• Narzędzia• Frameworki• Abstrakcja• Wzorce• MVVM• IOC/DI

• Cechy charakterystyczne aplikacji Windows 8• Testy jednostkowe

Page 4: Nowoczesna architektura w aplikacjach Windows Store

Co chemy osiągnąć?

• Separacja• Testowalność• Abstrakcja• Klocki LEGO• Stabilność• Wspólny kod Windows 8, Windows Phone 8• Może nawet WPF oraz Silverlight

Page 5: Nowoczesna architektura w aplikacjach Windows Store

Narzędzia

• Visual Studio 2012• JetBrains R#• JetBrains dotCover• nCrunch jest “prawie” gotowy na WinRT

Page 6: Nowoczesna architektura w aplikacjach Windows Store

Frameworki

• WinRT• Callisto• MVVM Light• MetroIOC • xUnit

Page 7: Nowoczesna architektura w aplikacjach Windows Store

Przydatne wzorce projektowe

• Singleton• Repository• Messenger• Factory• DI/IOC• MVVM• Locator

Page 8: Nowoczesna architektura w aplikacjach Windows Store

Foo : IFoo

• Każda klasa implementuje interface• AboutView : IAboutView• MainViewModel : IMainViewModel• MyRepository : IMyRepository• DialogService : IDialogService• Itd…

Page 9: Nowoczesna architektura w aplikacjach Windows Store

IoC/DI oraz InstanceFactory

• Każdy interface i class są zajerestrowane (zamapowane) w InstanceFactory• InstanceFactory• Wrapper dla IoC (MetroIOC)• Fabryka obiektów

Page 10: Nowoczesna architektura w aplikacjach Windows Store

MVVM

• Idealny dla XAML’a• Binding• Commanding• Messaging• Podstawowa implementacja jest prosta• Za mało abstrakcji

Page 11: Nowoczesna architektura w aplikacjach Windows Store

MVVM Commanding

• Brak kodu w code-behind• WinRT jest ograniczone• Przyciski – Command (Click)• TextBlock – Tapped ( ? )

• Potrzebna proteza• EventToCommand

Page 12: Nowoczesna architektura w aplikacjach Windows Store

EventToCommand

• Nuget• WinRtBehaviors• Win8nl

<TextBlock Text="{Binding Title}" FontSize="48"><WinRtBehaviors:Interaction.Behaviors><Win8nl_Behavior:EventToBoundCommandBehavior

Command="{Binding NavigateToDetailsCommand}"CommandParameter="{Binding Title}"Event="Tapped" />

</WinRtBehaviors:Interaction.Behaviors></TextBlock>

Page 13: Nowoczesna architektura w aplikacjach Windows Store

Messenger

• Messenger aka Mediator aka Pub/Sub aka EventAggregator• ViewModel’e niezależne od siebie• Brak wzajemnych referencji (nawet po interface)

• Komunikacja VM poprzez Messenger’a• “Mam takie dane, niech zainteresowany je sobie odbierze”

Page 14: Nowoczesna architektura w aplikacjach Windows Store

Locator

• Własna klasa• Rejestruje (mapuje) interface i klasy• Udostępnia właściwości ze wszystkimi ViewModel’ami• Przydaje się dla silnie typowanych wyrażeń Binding w XAM

Page 15: Nowoczesna architektura w aplikacjach Windows Store

A co z cechami Windows 8?

Page 16: Nowoczesna architektura w aplikacjach Windows Store

Okna dialogowe

• DialogWindow

• Element UI (View)• Sterowany przez ViewModel

• DialogService : IDialogService• Własna klasa (wrapper/Serwis) zarejestrowana w IoC

Page 17: Nowoczesna architektura w aplikacjach Windows Store

Nawigacja

• Wbudowana w WinRT• Jak nawigować z poziomu MVVM?• Trzeba się odciąć• Utworzyć osobny Serwis• Sterowanie z poziomu ViewModel• To ViewModel decyduje o przepływie aplikacji

• NavigationService : INavigationService• Własna klasa (wrapper) zarejestrowana w IoC

Page 18: Nowoczesna architektura w aplikacjach Windows Store

Charms / Settings

• Opcje aplikacji• About• Polityka prywatności• Zbudować wartwę abst

• Globalne• Per widok

Page 19: Nowoczesna architektura w aplikacjach Windows Store

Charms / Schare

• Przekazywanie danych między 2 aplikacjami• Inicjalizowane z ViewModel• Nie używam DataTransferManager w ViewModel• Potrzebna separacja (abstrakcja)

• ScharingService : IScharingService• Klasa (wapper) zarejestrowany w IoC

Page 20: Nowoczesna architektura w aplikacjach Windows Store

SemanticZoom

• ISemanticZoom• ListView• GridView

• ZoomIn• Nie ma sprawy• Zwykły Binding

• ZoomOut• Potrzebny ekstra code-behind

Page 21: Nowoczesna architektura w aplikacjach Windows Store

Testy jednostkowe

• Są ważne• Nie są łatwe• Zła architektura• Legacy code

• Mogą być łatwe• Dobra architektura• Mock, Fake

Page 22: Nowoczesna architektura w aplikacjach Windows Store

Podsumowanie

• Interface do każdej klasy• Rozdzielenie aplikacji na warstwy• View• ViewModel• Model (Repository)

• Wszystko jest sklejone poprzez InstanceFactory oraz IoC/DI• Łatwość wymiany “klocków”• Różne implementacje tych samych interface’ów

• Testowalność

Page 23: Nowoczesna architektura w aplikacjach Windows Store

Q & A

Page 24: Nowoczesna architektura w aplikacjach Windows Store

Dziękuję za uwagę