Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałZdzisława Denisiuk Został zmieniony 11 lat temu
1
Nowoczesna architektura w aplikacjach Windows Store
Wojciech Poniatowski
2
Wojciech Poniatowski Head of Windows Developer @ iApps Technologies
MVP MCT, MCPD Śląska Regionalna Grupa Microsoft Prelegent Autor webcastów
3
O co chodzi? Narzędzia Frameworki Abstrakcja Wzorce
MVVM IOC/DI Cechy charakterystyczne aplikacji Windows 8 Testy jednostkowe
4
Co chemy osiągnąć? Separacja Testowalność Abstrakcja Klocki LEGO
Stabilność Wspólny kod Windows 8, Windows Phone 8 Może nawet WPF oraz Silverlight
5
Narzędzia Visual Studio 2012 JetBrains R# JetBrains dotCover
nCrunch jest “prawie” gotowy na WinRT
6
Frameworki WinRT Callisto MVVM Light MetroIOC xUnit
7
Przydatne wzorce projektowe
Singleton Repository Messenger Factory DI/IOC MVVM Locator
8
Foo : IFoo Każda klasa implementuje interface AboutView : IAboutView
MainViewModel : IMainViewModel MyRepository : IMyRepository DialogService : IDialogService Itd…
9
IoC/DI oraz InstanceFactory
Każdy interface i class są zajerestrowane (zamapowane) w InstanceFactory InstanceFactory Wrapper dla IoC (MetroIOC) Fabryka obiektów
10
MVVM Idealny dla XAML’a Binding Commanding Messaging
Podstawowa implementacja jest prosta Za mało abstrakcji
11
MVVM Commanding Brak kodu w code-behind WinRT jest ograniczone
Przyciski – Command (Click) TextBlock – Tapped ( ? ) Potrzebna proteza EventToCommand
12
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>
13
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”
14
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
15
A co z cechami Windows 8?
16
Okna dialogowe DialogWindow Element UI (View)
Sterowany przez ViewModel DialogService : IDialogService Własna klasa (wrapper/Serwis) zarejestrowana w IoC
17
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
18
Charms / Settings Opcje aplikacji Globalne Per widok About
Polityka prywatności Zbudować wartwę abst Globalne Per widok
19
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
20
SemanticZoom ISemanticZoom ZoomIn ZoomOut ListView GridView
Nie ma sprawy Zwykły Binding ZoomOut Potrzebny ekstra code-behind
21
Testy jednostkowe Są ważne Nie są łatwe Mogą być łatwe
Zła architektura Legacy code Mogą być łatwe Dobra architektura Mock, Fake
22
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ść
23
Q & A
24
Dziękuję za uwagę
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.