View
27
Download
0
Category
Preview:
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
Citation preview
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ę
Recommended