Nowoczesna architektura w aplikacjach Windows Store

Post on 07-Feb-2016

28 views 0 download

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

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• IOC/DI

• Cechy charakterystyczne aplikacji Windows 8• Testy jednostkowe

Co chemy osiągnąć?

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

Narzędzia

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

Frameworki

• WinRT• Callisto• MVVM Light• MetroIOC • xUnit

Przydatne wzorce projektowe

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

Foo : IFoo

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

IoC/DI oraz InstanceFactory

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

MVVM

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

MVVM Commanding

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

• Potrzebna proteza• EventToCommand

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>

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”

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

A co z cechami Windows 8?

Okna dialogowe

• DialogWindow

• Element UI (View)• Sterowany przez ViewModel

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

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

Charms / Settings

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

• Globalne• Per widok

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

SemanticZoom

• ISemanticZoom• ListView• GridView

• ZoomIn• Nie ma sprawy• Zwykły Binding

• ZoomOut• Potrzebny ekstra code-behind

Testy jednostkowe

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

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

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ść

Q & A

Dziękuję za uwagę