240 likes | 371 Views
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
E N D
Nowoczesna architektura w aplikacjach Windows Store Wojciech Poniatowski
Wojciech Poniatowski • Head of Windows Developer @ iApps Technologies • MVP • MCT, MCPD • ŚląskaRegionalna Grupa Microsoft • Prelegent • Autorwebcastów
O co chodzi? • Narzędzia • Frameworki • Abstrakcja • Wzorce • MVVM • IOC/DI • Cechycharakterystyczneaplikacji Windows 8 • Testy jednostkowe
Co chemyosiągnąć? • Separacja • Testowalność • Abstrakcja • Klocki LEGO • Stabilność • Wspólnykod Windows 8, Windows Phone 8 • Możenawet WPF oraz Silverlight
Narzędzia • Visual Studio 2012 • JetBrains R# • JetBrains dotCover • nCrunch jest “prawie” gotowynaWinRT
Frameworki • WinRT • Callisto • MVVM Light • MetroIOC • xUnit
Przydatnewzorceprojektowe • Singleton • Repository • Messenger • Factory • DI/IOC • MVVM • Locator
Foo : IFoo • Każdaklasaimplementuje interface • AboutView : IAboutView • MainViewModel : IMainViewModel • MyRepository : IMyRepository • DialogService : IDialogService • Itd…
IoC/DI orazInstanceFactory • Każdy interface i class sązajerestrowane (zamapowane) w InstanceFactory • InstanceFactory • Wrapper dlaIoC (MetroIOC) • Fabrykaobiektów
MVVM • IdealnydlaXAML’a • Binding • Commanding • Messaging • Podstawowaimplementacja jest prosta • Zamałoabstrakcji
MVVM Commanding • Brakkodu w code-behind • WinRT jest ograniczone • Przyciski – Command (Click) • TextBlock – Tapped ( ? ) • Potrzebnaproteza • EventToCommand
EventToCommand • Nuget • WinRtBehaviors • Win8nl <TextBlockText="{BindingTitle}"FontSize="48"> <WinRtBehaviors:Interaction.Behaviors> <Win8nl_Behavior:EventToBoundCommandBehavior Command="{BindingNavigateToDetailsCommand}" CommandParameter="{BindingTitle}" Event="Tapped"/> </WinRtBehaviors:Interaction.Behaviors> </TextBlock>
Messenger • Messenger aka Mediator aka Pub/Sub aka EventAggregator • ViewModel’eniezależne od siebie • Brakwzajemnychreferencji(nawetpo interface) • Komunikacja VM poprzezMessenger’a • “Mam takiedane, niechzainteresowany je sobieodbierze”
Locator • Własnaklasa • Rejestruje(mapuje) interface iklasy • UdostępniawłaściwościzewszystkimiViewModel’ami • Przydajesiędlasilnietypowanychwyrażeń Binding w XAM
Oknadialogowe • DialogWindow • Element UI (View) • SterowanyprzezViewModel • DialogService : IDialogService • Własnaklasa (wrapper/Serwis) zarejestrowana w IoC
Nawigacja • Wbudowana w WinRT • Jaknawigować z poziomu MVVM? • Trzebasięodciąć • Utworzyćosobny Serwis • Sterowanie z poziomuViewModel • To ViewModeldecyduje o przepływieaplikacji • NavigationService : INavigationService • Własnaklasa (wrapper) zarejestrowana w IoC
Charms / Settings • Opcjeaplikacji • About • Politykaprywatności • Zbudowaćwartwęabst • Globalne • Per widok
Charms / Schare • Przekazywaniedanychmiędzy 2 aplikacjami • Inicjalizowane z ViewModel • NieużywamDataTransferManager w ViewModel • Potrzebnaseparacja (abstrakcja) • ScharingService : IScharingService • Klasa(wapper) zarejestrowany w IoC
SemanticZoom • ISemanticZoom • ListView • GridView • ZoomIn • Nie ma sprawy • Zwykły Binding • ZoomOut • Potrzebnyekstra code-behind
Testy jednostkowe • Sąważne • Niesąłatwe • Złaarchitektura • Legacy code • Mogąbyćłatwe • Dobra architektura • Mock, Fake
Podsumowanie • Interface do każdejklasy • Rozdzielenieaplikacjinawarstwy • View • ViewModel • Model (Repository) • Wszystko jest sklejonepoprzezInstanceFactoryorazIoC/DI • Łatwośćwymiany “klocków” • Różneimplementacjetychsamychinterface’ów • Testowalność